bean注入方式
- 构造函数注入
- setter方法注入
官网上面有解释
bean注入模型
- no
- byType
- byName
- constructor
官网上的介绍
SpringIOC容器,负责实例化、配置和组装bean。它可以有两种方式进行配置和组装bean,每种方式,又可以分为以什么模型来完成。
构造方法注入的方式,只能通过构造模型注入。setter方法注入的方式,可以通过bean的名称或者bean的class类型注入(byType/byName)。
bean的自动装配
bean的自动装配,分为三种。byName,byType,constructor。
解释:定义一个bean,里面又依赖某个bean,在没有对这个依赖bean做任何注入的时候,如果对这个定义bean,指定某种自动装配。那么Spring会根据自动装配模型,通过setter方法或构造函数,进行属性填充。
比如:byName
byType:
需要在定义的bean中,定义相应的setter方法。
bean的自动装配与@Autowire
在实际开发中,我们没有指定bean的自动装配模型,大多数都是在需要依赖属性上面加上@Autowire注解。无需多余代码,Spring也会把这个依赖属性完成填充。那是不是说明加了@Autowire注解就说明我们这个bean就是自动装配了呢。其实不然,通过源码,可以看到,@Autowire注解是调用了bean的后置处理器AutowiredAnnotationBeanPostProcessor的postProcessProperties方法完成属性注入。方法的核心其实就是运用java反射技术,field.set(object,args);
这个跟bean注入模型不对应,bean的注入模型分为byType,和byName,constructor。基于setter方法和构造函数。
@Autowire与@Resource
在实际开发中,使用@Resource注解属性,也可以完成属性的依赖注入。那么@Autowire与@Resource两者有什么区别呢?
- 两者的包不同,@Resource是 javax.annotation包下的,归属于jdk;@Autowire是 org.springframework.beans.factory.annotation包下的,归属于Spring。
- 两者完成属性注入时使用的bean的后置处理器不同。@Resource 是用CommonAnnotationBeanPostProcessor.postProcessProperties()方法,@Autowire则是AutowiredAnnotationBeanPostProcessor bean后置处理器来完成属性注入。