Spring自动装配时忽略给定的依赖接口 ignoreDependencyType 与 ignoreDependencyInterface
文章目录
一、基本类建立
一共5个类
二、调试
1.debug看MyUserTest类中属性注入情况(此时未用到MyPostProcess类)
释:可以看到A类中的B类也有实例(举例来说,当 A 中有属性 B ,那么 当 Spring 在获取 A 的 Bean 的时候如果其属性 B 还没有
初始化,那么 Spring 会自动初始化 B ,这也是 Spring提供的一个重要特性(自动装配)。但是,某些情况下, B 不会被初始化,下面来看看什么情况B不会被实例化)
2.通过ignoreDependencyType使B类不被实例化
在AComponent类中加入MyPostProcess类
MyPostProcess类实现了BeanFactoryPostProcessor接口
debug看MyUserTest类中属性注入情况,发现A中的B属性是null
3.通过ignoreDependencyInterface使B类不被实例化
修改MyPostProcess类如下图:
debug看MyUserTest类中属性注入情况,发现A中的B属性是null
三、分析
1. ignoreDependencyInterface和ignoreDependencyType方法是如何让A中的B属性不被注入的。
看beanFactory.ignoreDependencyInterface(A.class)方法跟进去如下图
ignoreDependencyInterface和ignoreDependencyType是两个set集合
整个类只有isExcludedFromDependencyCheck方法用到了这两个集合,isExcludedFromDependencyCheck方法的意思是判断给定的bean属性在依赖检测中要被排除,假如该方法返回true,也就是在依赖检测中这个bean的属性要被排除,在自动装配时就会被忽略。
总结
1.
@Bean(autowire=Autowire.BY_TYPE)可以根据类型注入实例
2.
ignoreDependencyInterface和ignoreDependencyType使bean不初始化