wordpress招聘模板,网站没有收录从哪开始做优化,网站后台管理系统,找团队做网站文章目录 Spring 如何解决循环依赖问题resource 与 autowire 同时存在时谁生效 Spring 如何解决循环依赖问题
Spring在实例化一个bean的时候#xff0c;是首先递归实例化其所依赖的所有bean#xff0c;直到某个bean没有依赖其他bean#xff0c;此时就会将该实例返回#x… 文章目录 Spring 如何解决循环依赖问题resource 与 autowire 同时存在时谁生效 Spring 如何解决循环依赖问题
Spring在实例化一个bean的时候是首先递归实例化其所依赖的所有bean直到某个bean没有依赖其他bean此时就会将该实例返回然后反递归的将获取到的bean设置为各个上层bean的属性的。 通俗地说就是设置两个池子一个成品池子一个半成品池子。能解决循环依赖的前提是spring开启了allowCircularReferences那么一个正在被创建的bean才会被放在半成品池子里。在注入bean向容器获取bean的时候优先向成品池子要要不到再去向半成品池子要。 resource 与 autowire 同时存在时谁生效
public class AutowireResourceTest {public static void main(String[] args) {DefaultListableBeanFactory beanFactory new DefaultListableBeanFactory();// bean 的定义classscope初始化销毁// 把 Config 类交给spring容器管理AbstractBeanDefinition beanDefinition BeanDefinitionBuilder.genericBeanDefinition(Config.class).setScope(singleton).getBeanDefinition();beanFactory.registerBeanDefinition(config, beanDefinition);// 给 BeanFactory 添加一些常用的后置处理器AnnotationConfigUtils.registerAnnotationConfigProcessors(beanFactory);beanFactory.getBeansOfType(BeanFactoryPostProcessor.class).values().forEach(i - i.postProcessBeanFactory(beanFactory));beanFactory.getBeansOfType(BeanPostProcessor.class).values().forEach(beanFactory::addBeanPostProcessor);System.out.println(beanFactory.getBean(Bean1.class).getInner());}Configurationstatic class Config {Beanpublic Bean3 bean3() {return new Bean3();}Beanpublic Bean4 bean4() {return new Bean4();}Beanpublic Bean1 bean1() {return new Bean1();}}static class Bean1 {AutowiredResource(name bean4)private Inner bean3;private Inner getInner() {return bean3;}}interface Inner {}static class Bean3 implements Inner {Bean3() {System.out.println(.3);}}static class Bean4 implements Inner {Bean4() {System.out.println(.4);}}
}
autowired 与 resource(name‘xx’) 同时存在时注入了autowired 的bean。
这跟bean的处理顺序有关在源码中可以找个两个bean的order的大小关系当然我们可以手动修改bean的比较器来决定哪个bean起作用。 但是在实际应用中一般不会同时使用autowired 和 resource 如果有那写的那个人肯定第二天不用来上班了。