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

来源:3-4 Spring Bean装配之自动装配

未卜先知

2016-12-13 13:58

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

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

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


写回答 关注

3回答

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

    Zuoxia...

    我觉得方法名要一致 而不是参数 你可以试试

    2017-08-07 19:04:59

    共 2 条回复 >

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

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

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



    未卜先知

    从容器中获取id的autoWiringService实例

    2017-01-22 19:46:58

    共 1 条回复 >

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

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

    未卜先知

    这几天重新回顾并且验证下了,似乎和以前想的不一样,应该不是在执行方法的时候注入的,而是在创建上下文的时候就全部完成了

    2017-01-05 21:51:45

    共 1 条回复 >

Spring入门篇

为您带来IOC和AOP的基本概念及用法,为后续高级课程学习打下基础

268785 学习 · 963 问题

查看课程

相似问题