SPRING循环依赖(circular reference)的解决方法
2014-03-10 16:08
1016 查看
有时候,在SPRING中两个类互相含有对方的声明,一般情况这是不允许并且极可能是有错误的。
会报这个错:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘***’: Bean with name ‘***’ has been injected into other beans [***, ***]in its raw version as part of a circular reference,
but has eventually been wrapped (for example as part of auto-proxy creation). This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using ‘getBeanNamesOfType’ with the ‘allowEagerInit’
flag turned off, for example.
但有时候这正是我们想要的,考虑这种情况:
我们用一个ManagerFactory来包含所有Manager的声明,以便在程序中用到多个Manager的地方,一个入口集中访问。但是,可能某个Manager本身就需要用到其它几个Manager,进而用到ManagerFactory。这时,我们可以这样声明即可:
<bean id="managerFactory" class="common.utils.ManagerFactory" lazy-init="true"/>
除了注册Bean之外,还可以通过在<bean>上设置属性来控制Bean的其他属性,比如:
<bean name="" class=""
lazy-init=“true” //是否延迟初始化
scope=“prototype” //bean的生命周期
depends-on=“其他bean“ //依赖其他bean
/>
在Spring中也有相应的注解去对应
@Lazy
@Scope
@DependsOn
他们都是放在类的头上。
除了注册Bean之外,还可以通过在<bean>上设置属性来控制Bean的初始化方法和析构方法,比如:
<bean name="" class=""
init-method=“init“ //初始化方法
destroy-method=“close“ //析构方法
/>
在Spring中也有相应的Bean去对应,当然,这两个注解是jdk里内置的
@PostConstruct
@PreDestroy
这两个注解放在方法头上。
会报这个错:
org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name ‘***’: Bean with name ‘***’ has been injected into other beans [***, ***]in its raw version as part of a circular reference,
but has eventually been wrapped (for example as part of auto-proxy creation). This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using ‘getBeanNamesOfType’ with the ‘allowEagerInit’
flag turned off, for example.
但有时候这正是我们想要的,考虑这种情况:
我们用一个ManagerFactory来包含所有Manager的声明,以便在程序中用到多个Manager的地方,一个入口集中访问。但是,可能某个Manager本身就需要用到其它几个Manager,进而用到ManagerFactory。这时,我们可以这样声明即可:
<bean id="managerFactory" class="common.utils.ManagerFactory" lazy-init="true"/>
除了注册Bean之外,还可以通过在<bean>上设置属性来控制Bean的其他属性,比如:
<bean name="" class=""
lazy-init=“true” //是否延迟初始化
scope=“prototype” //bean的生命周期
depends-on=“其他bean“ //依赖其他bean
/>
在Spring中也有相应的注解去对应
@Lazy
@Scope
@DependsOn
他们都是放在类的头上。
除了注册Bean之外,还可以通过在<bean>上设置属性来控制Bean的初始化方法和析构方法,比如:
<bean name="" class=""
init-method=“init“ //初始化方法
destroy-method=“close“ //析构方法
/>
在Spring中也有相应的Bean去对应,当然,这两个注解是jdk里内置的
@PostConstruct
@PreDestroy
这两个注解放在方法头上。
相关文章推荐
- SPRING循环依赖(circular reference)的解决方法 [转贴]
- SPRING循环依赖(circular reference)的解决方法
- Spring中的循环依赖问题介绍及解决方法
- Spring中的循环依赖问题介绍及解决方法
- Spring源码解析笔记5——循环依赖的解决
- Spring 4.2 方法注入解决单例Bean的原型Bean依赖问题
- spring 源码探索--单例bean解决循环依赖问题
- Springboot循环依赖解决办法
- 解决spring循环依赖的问题:has been injected into other beans
- 链接静态库循环依赖解决方法
- Spring源码学习--Bean对象循环依赖问题解决(四)
- 解决,spring Is there an unresolvable circular reference?
- Spring项目出现Referenced file contains errors的 解决方法
- Spring如何解决循环依赖
- 解决spring循环依赖的问题:has been injected into other beans
- MyEclipse 保存文件时报错 An internal error occurred during: "Building Spring AOP reference model" 的解决方法
- Spring-bean的循环依赖以及解决方式
- spring boot log4j2与三方依赖库log4j冲突无法初始化问题解决方法
- because it is included into a circular dependency循环依赖的解决办法
- IDEA 循环依赖解决方法