にプログラム豆を追加し、私は自分のWebアプリケーションにプログラム的にBeanを追加しようとしています。私は@Component
アノテーションで作成したSpring Beanを持っており、ApplicationContextAware
インターフェイスを実装しています。があるため、プラグインアーキテクチャの春のWebアプリケーションコンテキスト
マイオーバーライド機能は、次のようになります。
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
// this fails
this.applicationContext = (GenericWebApplicationContext) applicationContext;
}
基本的に、私はsetApplicationContextに与えられたのApplicationContextオブジェクトにBeanを追加する方法を見つけ出すことはできません。誰かが私がこれについてどうやって間違った方法をしているか教えてもらえますか?
[OK]を、これは私が解決策としてになってしまったものです:春3.0で
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry bdr)
throws BeansException {
BeanDefinition definition = new RootBeanDefinition(
<My Class>.class);
bdr.registerBeanDefinition("<my id>", definition);
}
ありがとう:ここでは簡単なコードです。私は一番難しい部分は何を探すべきかを知っていると思います。 – user146714
[のJavaDoc](http://static.springsource.org/spring/docs/3.0.x/javadoc-api/index.html?org/springframework/beans/factory/config/BeanPostProcessor.htmlどおりという気をつけてください。 ): 'BeanFactoryPostProcessorは、Bean定義と対話して変更することができますが、Beanのインスタンスは変更しません。そうすると、Beanのインスタンス化が早すぎてコンテナに違反し、意図しない副作用を引き起こす可能性があります。 Beanインスタンスの相互作用が必要な場合は、代わりにBeanPostProcessorを実装することを検討してください。 ' – dgiffone
'BeanDefinitionRegistryPostProcessor'をどうすればいいですか?このクラスを書いたとします。次は何?どのようにそれをアクティブにするには? – Dims