问答详情
源自:3-4 Spring Bean装配之自动装配

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

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

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

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


提问者:未卜先知 2016-12-13 13:58

个回答

  • Flor
    2016-12-13 16:25:53
    已采纳

    执行流程是:

    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没有关系,会找类型一致的去加载。

  • 11慕名而来
    2017-01-18 10:02:59

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

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



  • Flor
    2016-12-13 17:17:11

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