5

Spring3.1を使用します。プロトタイプスコープでBeanを取得したい場合(つまり、毎回異なるクラスのインスタンスが必要な場合)、ApplicationContextawareクラスを使用せずにBeanを取得することは可能ですか?

これが私が現在やっている方法です

@Component
@Qualifier("MyService")
public class MyServiceImpl implements MyService {

    @Override
    public void doSomething() {
        Blah blah = (Blah)ApplicationContextProvider.getContext().getBean("blah");
        blah.setThing("thing");
        blah.doSomething();
    }
}


@Component("blah")
@Scope("prototype")
public class Blah {
    ....
}

ここで、ApplicationContextProviderはApplicationContextAwareを実装します。

ApplicationContextAwareクラスを使用せずに、アノテーションまたは単純なSpring構成でこれを行うことは可能ですか?

4

2 に答える 2

0

ApplicationContextAwareは本当に必要ありません。必要なのはBeanFactoryだけです(ApplicationContextAwareはそれを取得するための便利な方法です)。

スコーププロトタイプを持つBeanは、ApplicationContext.getBeanが呼び出されるたびに、Beanの新しいインスタンスが作成されることを意味します。プロトタイプBeanをシングルトンで注入しようとすると、プロトタイプBeanは1回注入されます(したがって、プロトタイプはもう注入されません)。

本当に必要な場合に役立つメソッドインジェクションと呼ばれるものがありますが、単にapplicationContext.getBean()を呼び出すよりも複雑です。

于 2013-01-04T11:42:42.653 に答える