27

(を使用して)B自分で作成する必要があり、アノテーションが付いているBeanがあります。new B()@Autowire@PostConstruct

BeanからこれらのアノテーションをSpringに処理させるにはどうすればよいAですか?

関連する質問:

4

2 に答える 2

45

アーロン、あなたのコードは正しいと思いますが、私は以下を使用しました:

B bean = new B();
AutowireCapableBeanFactory factory = applicationContext.getAutowireCapableBeanFactory();
factory.autowireBean( bean );
factory.initializeBean( bean, "bean" );

最初のメソッドは@Autowireフィールドとメソッドを処理します(ただし、クラシックプロパティは処理しません)。2番目のメソッドは、後処理(@PostConstructおよび定義されBeanPostProcessorたs)を呼び出します。

アプリケーションコンテキストは、インターフェイスを実装している場合、Beanで取得できApplicationContextAwareます。

于 2012-08-15T07:53:04.277 に答える
1

もう1つのオプションは、(newキーワードを使用して自分で新しいインスタンスを作成する代わりに)Springコンテナに新しいBeanを自動的に作成させることです。プログラムで新しいインスタンスをインスタンス化する必要があるクラス内に、 AutowireCapableBeanFactoryのインスタンスを挿入します。

@Autowired
private AutowireCapableBeanFactory beanFactory;

それで:

B yourBean = beanFactory.createBean(B.class);

コンテナは、通常どおり@Autowiredアノテーションが付けられたインスタンスを注入します。

于 2020-12-25T10:14:38.697 に答える