2、Spring中的一些现象
1、注入模型
默认的注入模型:AbstractBeanDefinition.AUTOWIRE_NO=0 通过构造方法注入
1.1、setter方法名称注入模型
AbstractBeanDefinition.AUTOWIRE_BY_NAME=1
1.1.1、现象1
使用setter方法名称注入模型,在这个类中所有的public setter方法的name在容器中(setA A在容器中),就会被选用注入
1.2、setter方法类型注入模型
AbstractBeanDefinition.AUTOWIRE_BY_TYPE=2
1.2.1、现象1
使用setter方法类型注入模型,在这个类中所有的public setter方法并且参数类型必须要在容器中的都会被执行
1.3、构造方法注入模型
AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR=3
1.3.1、现象1
使用构造方法实例化bean,如果这个类中所有的构造方法只有一个参数,就会选用最后一个构造方法实例化bean
1.3.2、现象2
当构造方法有多个参数时,会选用参数最多的构造方法来实例化bean,不在bean中的 参数再多也不会选用
2、order
优先级@Order < Ordered接口 < PriorityOrdered接口
2.1 现象
- 和实例化bean的顺序无关
- 和执行bean的顺序无关
- 和bean列表中的顺序有关(获取一批bean中的顺序有关)
3、@DependsOn
优先实例化注解中的类
4、@Lookup
使用@Lookup注解可以将一个方法标记为一个“查找方法”,在调用该方法时,Spring会在运行时为其生成一个具体的实例并返回。
5、@Autowired
通过type匹配, 如果只有一个,就完成匹配
通过type匹配,如果有多个,再通过name匹配
6、 @Resource
通过名字匹配,如果只有一个,就完成匹配
通过名字匹配,如果有多个,就通过type匹配
3、其他
- BeanFactoryPostProcessor当中无法解析@Autowired和@PostCOnstruct,但是可以执行InitializingBean#afterPropertiesSet