纯注解注入 VS 其他方式注入:
不管是Spring还是SpringBoot,如果使用了纯注解注入的方式:即使用@Component、@AutoWired
注解实现依赖注入,都不需要实现setter方法。底层也不会通过Setter方法实现依赖的注入。
① 但是,对于Spring,如果采用了配置 beans.xml 的方式实现依赖的注入
如下图:为Spring通过配置XML实现依赖注入
<bean class="com.cxz.spring.test2.PeopleDao" id="dao"/>
<bean class="com.cxz.spring.test2.PeopleService" id="service">
<property name="peopleDao" ref="dao"/>
</bean>
这种方式实现依赖注入,必须要写被注入Bean的setter方法:
public void setPeopleDao(PeopleDao peopleDao) {
this.peopleDao = peopleDao;
System.out.println("setPeopleDao~~");
}
不然会报错!!!
而Spring底层也是通过 Setter方法实现的依赖注入。
② 而对于SpringBoot来说,如果采用配置类和@Bean实现的话,必须也实现Setter方法,
才能实现依赖的注入。
③ 如果SpringBoot在bean中写了有参构造方法,那么不写Setter也可以实现依赖的注入
public MonsterService(MonsterDao monsterDao) {
System.out.println("MonsterService 有参构造");
this.monsterDao = monsterDao;
}
其实有参构造就相当于实现了MonsterDao的setter方法了。本质是一样的,都是让MonsterService
获得MonsterDao这个属性。this.monsterDao = monsterDao才是核心。
综上,非注解的方式实现依赖注入,无论是Spring还是SpringBoot,都得有实质性的语句
即 this.monsterDao = monsterDao
才能实现属性的获得。
但怎么说,在编写Bean的时候,最好Setter和构造器一套都整上,这样绝不会有任何问题。