3

重複の可能性:
@Resourceと@Autowired

Spring@Controllerをで定義し、で定義されたサービスBeanを取得するために@Scope("request")使用しましたが、ページをリロードするたびに、常に同じインスタンスのサービスBeanを取得します。@Resource@Scope("prototype")

に変更@Resourceすると、@Autowired実際には期待どおりに機能することがわかりました。ページをリロードするたびに、サービスBeanの新しいインスタンスを取得します。

これは予想される動作ですか?@Resourceとの違いについての理解が不足してい@Autowiredますか?

4

1 に答える 1

1

それは非常に奇妙です。少なくともスコープに関しては同じように動作することを期待していました-私が知っている唯一の違いは、自動配線のタイプに関するものです.

あなたの問題は、protoype Bean で @Scope アノテーションを使用して proxyMode を指定する必要があることにもっと関係していると思います。

@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS) //Or ScopedProxyMode.INTERFACES

これは、requestスコープがプロトタイプのスコープよりも大きくなる可能性があるため必要です。インジェクトされた同じプロキシ インスタンスが表示されますが、依存する Bean のメソッドを呼び出すと、適切なスコープの Bean に委譲されることがプロキシによって保証されます。

于 2012-09-21T00:06:00.747 に答える