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不初始化

本文介绍如何使用Spring的ignoreDependencyType和ignoreDependencyInterface方法来避免特定类型的依赖被自动装配。通过示例展示了这两种方法如何使Spring在自动装配过程中忽略指定的依赖。

被折叠的 条评论
为什么被折叠?



