我正在尝试将新 bean 引入现有项目
当前的bean是
package w.x.y.z.pkgA
@Component
public class BeanA implements InterfaceA {
}
我正在尝试将新 Bean 添加到w.x.y.z.pkgB
package w.x.y.z.pkgB
public class BeanB implements InterfaceB {
@Autowired
private BeanA beanA
@PostConstruct
public void postConstructMethod() {
//Call some method in BeanA
}
}
从BeanB
我想访问BeanA
数据和在BeanB
后期构造中我想BeanB
注册BeanA
. 所以我想调用BeanA
方法
所有这些包都打包为jar,spring context xml是
<context:annotation-config />
<context:component-scan base-package="w.x.y.z.pkgA,w.x.y.z.pkgB" />
<bean id="beanb" clas="w.x.y.z.pkgB.BeanB"></bean>
但是在部署过程中,我在创建状态下得到了关于 bean 的异常
Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'context': Requested bean is currently in creation: Is there an unresolvable circular reference?
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.beforeSingletonCreation(DefaultSingletonBeanRegistry.java:347)
at w.x.y.z.BeanA<init>(BeanA.java:25)
at w.x.y.z.BeanB.<init>(BeanB.java:35)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
我还尝试删除 @Autowired 并BeanA
使用getBeanFactory().getBean(BeanA.class)
. 但我得到同样的错误。
如果我从 xml 文件中删除 bean 条目,它们会被正确部署,但 post 构造永远不会被调用,因为它不再是 bean。
BeanA
完全不依赖BeanB
。没有参考?
当两个豆子在同一个罐子里时,有没有办法得到这个@Autowired
并工作?@PostConstruct