既存のプロジェクトに新しい 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 エントリを削除すると、適切にデプロイされますが、bean ではないため、ポスト コンストラクトが呼び出されることはありません。
BeanA
にはまったく依存していませんBeanB
。参考文献はありませんか?
@Autowired
これを取得し@PostConstruct
て、2 つの Bean が同じ瓶に入っているときに機能する方法はありますか?