byName是怎么完成自动装配的?set方法是什么时候被调用的?
byName中的set方法是自动被调用的么?怎么实现的?
执行 InjectionService service = super.getBean("injectionService"); 是不是就同时执行了
public void setInjectDao(injectDao injectDao) { this.injectDao = injectDao; }
byName中的set方法是自动被调用的么?怎么实现的?
执行 InjectionService service = super.getBean("injectionService"); 是不是就同时执行了
public void setInjectDao(injectDao injectDao) { this.injectDao = injectDao; }
2016-12-13
执行流程是:
加载spring配置文件。
通过构造方法获取service类的实例。(这里获取到实例还没有执行Dao中的方法)
通过service实例调用service的方法,service中的方法调用Dao的方法,在service中通过私有化Dao类的属性和set方法注入了Dao类。这里的set方法的参数就是ByName执行的关键,在调用了service方法时会通过这个set方法的参数名去spring配置文件中找id和参数名称一致的bean。找到后就装配这个bean对应的Dao类。
也就是说你set方法中的参数名injectDao必须要和spring配置文件中的id一样,否则会找不到。
ByType的话就跟id没有关系,会找类型一致的去加载。
举报