概述
相关阅读
Spring源码笔记之自动装配以及beanFactory.ignoreDependencyInterface()
类加载器的命名空间
使用Optional的orElse()重复执行问题
registerResolvableDependency() 方法
registerResolvableDependency()方法是声明在 ConfigurableListableBeanFactory接口中的
在初始化IOC中的时候,在AbstractApplicationContext#prepareBeanFactory
中被调用
作用?
在Spring自动装配的时候如果一个接口有多个实现类,并且都已经放到IOC中去了,
那么自动装配的时候就会出异常,因为spring不知道把哪个实现类注入进去,
但是如果我们自定义一个类,然后实现BeanFactoryPostProcessor接口
在该阶段调用这个方法,如果哪个地方要自动注入这个类型的对象的话,那么就注入进去我们指定的对象
该方法在springIOC初始化的时候的使用
由于BeanFactory会有很多实现,如果我们在Spring中直接想注入BeanFactory类型的对象,不这么做的话会报错的。Spring通过这个registerResolvableDependency()方法很好的解决了这个问题,当你想要注入BeanFactory对象的时候,Spring在初始化时期就帮我们指定了要注入哪个对象
该方法的主要作用就是指定该类型接口,如果外部要注入该类型接口的对象,则会注入我们指定的对象,而不会去管其他接口实现类
实战
定义 Component 接口
public interface Component {
}
然后创建两个Component的实现类,分别为 ComponentAImple 和 ComponentBImlp
@org.springframework.stereotype.Component
public class ComponentAImple implements Component {
private String mark = "a";
}
@org.springframework.stereotype.Component
public class ComponentBImple implements Component {
private String mark = "b";
}
创建一个junit单元测试类
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = SpringTest2Config.class)
public class TestSpring1 {
@Autowired
private Component component;
@Test
public void test(){
}
}
注入一个 component类型的对象
上面这个程序启动肯定是会报错的
原因:因为Component类型的对象有两个,而且都是由Spring管理的,Spring注入对象的时候发现了多个,它不知道应该注入哪个对象而抛出异常,
怎么能不报错呢?
可以使用 @Primary 注解,但是这个注解不在这里讨论
我们可以使用 registerResolvableDependency()方法来实现
创建一个 TestRegisterResolvableDependency 类,实现BeanFactoryPostProcessor接口 并放到IOC容器中
@org.springframework.stereotype.Component
public class TestRegisterResolvableDependency implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
beanFactory.registerResolvableDependency(Component.class, new ComponentAImple());
}
}
注意beanFactory.registerResolvableDependency(Component.class, new ComponentAImple()); 方法,这行代码的意思是,当有其他类要注入 Component类型的对象时,就给他注入我们这里自己创建的 ComponentAImple对象
运行程序,发现不报错了,而且注入进来的对象是我们创建的 ComponentAimple对象
最后
以上就是坚定柜子为你收集整理的Spring源码笔记之beanFactory.registerResolvableDependency()方法相关阅读registerResolvableDependency() 方法作用?实战的全部内容,希望文章能够帮你解决Spring源码笔记之beanFactory.registerResolvableDependency()方法相关阅读registerResolvableDependency() 方法作用?实战所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复