2016-09-06 4 views
1

私は、そうでない場合は非常に一般的なPOJOになるクラスを持っていますが、私は(コンストラクタ)のパラメータとしてその依存関係を渡し避けたいので、私はそれに依存性を注入したいと思います:なし現在依存関係を有効にするためにSpringコンテキストにPOJOを追加するには?

//no managed context annotation because it's a simple POJO 
public class QueuedBatch { 

    //however, I would like to inject the context managed bean below 
    @Autowired 
    AsyncActionQueue asyncActionQueue; 

、デプロイ時に例外がスローされますが、実行時にasyncActionQueueがnullになるため、POJOにヒットするとNullPointerが返されます。

POJOに注釈を付けて、Spring管理コンテキストに追加することで、依存関係を注入できますか? AsyncActionQueueはシングルトンであり、(コンストラクタ)パラメータとしてQueuedBatchに渡すのではないでしょうか。

This postは、POJOを管理コンテキストに追加したい点を除いて、同様です。

+0

@Componentとして注釈を付けます。それは書かれているように春のコントロール下にはありません。それを作成するためにnewを呼び出すと、Springはそれについて何も知らない。 – duffymo

+0

'QueuedBatch'を' @ Component'として注釈していますか? – amphibient

+0

*コンストラクタパラメータの受け渡しを避けてはいけません。それが必要な依存関係なら、それを隠さないでください。 – chrylis

答えて

1

コメントは、あなたがこの

  1. に対処するための2つの方法があります示唆したようにはQueuedBatchのコンストラクタのパラメータとしてAsyncActionQueueを渡します。これは、SpringがQueuedBatchについて何かを知っていることを必要としませんが、QueuedBatchのインスタンスが作成されたときに依存関係が強制されます。

  2. @ComponentでQueuedBatchクラスに注釈を付ける。また、Springコンテキストを初期化するときにQueuedBatchを含むパッケージがコンポーネントスキャンに含まれていることを確認します。このようにして、AsyncActionQueueをautowiredにすることができます。要件に基づいてQueuedBatchコンポーネントの範囲を変更することができます。