为了账号安全,请及时绑定邮箱和手机立即绑定

byName是怎么完成自动装配的?set方法是什么时候被调用的?

byName中的set方法是自动被调用的么?怎么实现的?

执行 InjectionService service = super.getBean("injectionService"); 是不是就同时执行了

public void setInjectDao(injectDao injectDao) {
      this.injectDao = injectDao;
}


正在回答

3 回答

执行流程是:

  1. 加载spring配置文件。

  2. 通过构造方法获取service类的实例。(这里获取到实例还没有执行Dao中的方法)

  3. 通过service实例调用service的方法,service中的方法调用Dao的方法,在service中通过私有化Dao类的属性和set方法注入了Dao类。这里的set方法的参数就是ByName执行的关键,在调用了service方法时会通过这个set方法的参数名去spring配置文件中找id和参数名称一致的bean。找到后就装配这个bean对应的Dao类。

也就是说你set方法中的参数名injectDao必须要和spring配置文件中的id一样,否则会找不到。

ByType的话就跟id没有关系,会找类型一致的去加载。

0 回复 有任何疑惑可以回复我~
#1

未卜先知 提问者

非常感谢!这样思路就清晰了
2016-12-13 回复 有任何疑惑可以回复我~
#2

Zuoxianyong

我觉得方法名要一致 而不是参数 你可以试试
2017-08-07 回复 有任何疑惑可以回复我~

public void testSay() {
        AutoWiringService service = super.getBean("autoWiringService");
        service.say(" this is a test");
    }

super.getBean("autoWiringService");这个怎么理解,是什么意思



0 回复 有任何疑惑可以回复我~
#1

未卜先知 提问者

从容器中获取id的autoWiringService实例
2017-01-22 回复 有任何疑惑可以回复我~

我也是在学习,有更深入的理解的话可以互相分享。嘿嘿

0 回复 有任何疑惑可以回复我~
#1

未卜先知 提问者

这几天重新回顾并且验证下了,似乎和以前想的不一样,应该不是在执行方法的时候注入的,而是在创建上下文的时候就全部完成了
2017-01-05 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

byName是怎么完成自动装配的?set方法是什么时候被调用的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信