2012-04-25 1 views
4

可能な重複していautowireクラス:私のコントローラで
Anyway to @Autowire a bean that requires constructor arguments?春 - コンストラクタ

は、私が法/コンストラクタオートワイヤリングを使用してクラスを注入する@Autowiredを使用したいです。使用例:

@Autowired 
private InjectedClass injectedClass; 

私の問題は、注入されたクラスinjectedClassがコンストラクタを持っている、と私は、コントローラからのコンストラクタに変数を渡す必要があるということです。どのようにしてコンストラクタに値を渡すことができますか?

+0

ティムは、私は、これはduplicatの質問 – webmobileDev

答えて

3

プライベートデータメンバーを@Resource(name = "x")注釈でマークするか、アプリケーションコンテキストXMLでコンストラクタインジェクションを使用してそれらを結ぶことができます。

注釈とXML設定は、Springで混合することができます。それはすべてでもなくてもよい。

<bean id="myClass" class="foo.bar.MyClass"> 
    <constructor-arg ref="yourArgRefHere"/> 
</bean> 
+0

あると思ういけないが、私はそれがより多くのコンテキストなしで伝えるのは難しいコード – webmobileDev

+0

で送信する必要があることいくつかの事ダイナミックyourArgRefHereです。おそらく、それは春のコントロール下にあるべきではないでしょう。おそらく、あなたは単にキーを渡すSpringによって管理されるファクトリを必要とします。知りません。 – duffymo

5

、あなたがMyClassのの特別なコンストラクタに渡しています自動ワイヤ豆のMyClassのコンストラクタに@Autowired注釈を適用することができ、注釈を使用している場合。たとえば次のように考えてください

public class MovieRecommender { 

    @Autowired 
    private MovieCatalog movieCatalog; 

    private CustomerPreferenceDao customerPreferenceDao; 

    @Autowired 
    public MovieRecommender(CustomerPreferenceDao customerPreferenceDao) { 
     this.customerPreferenceDao = customerPreferenceDao; 
    } 

    // ... 
} 
+0

あなたは私を理解できないと思いますが、私はCustomerPreferenceDaoのための動的コンストラクタが必要です – webmobileDev

+0

@webmobileDev - あなたはあなたの質問のどこにでも言及していません... – James111