2012-01-05 17 views
1

@Autowiredサービスクラスをフィールドとして使用するクラスがありますが、そのクラス自体は@serviceまたは@Componentではありません。それを正しく使用するには、デフォルトのコンストラクタを使用します。SpringクライアントはSpring Beanではありませんが、Autowired Beanフィールドが必要です

「このクラスを@Autowiringにスキャンしてくださいが、Spring Bean自体ではありません」というアノテーションはありますか?これは私にとって本当のユースケースのようです(クライアントはいくつかの豆をオートワイヤーして使いたいと思っていますが、それ自体は豆です)。

答えて

0

手動でBeanを挿入し、context:annotation configを使用する必要があります。

public class ABD{ 

@Autowired 
public Bean2 b2;  

}

を次のようにクラスを持っていて、コンストラクタ・インジェクションスルーいくつかの他のBeanにABDを注入した場合、@Autowiredが適用される場合は、他のスプリングは、それがないようにBeanをinstatiateすることができません引数のないコンストラクタを持つ。

一方、オブジェクトがBeanでない場合は、How to autowire a bean inside a class that is not a configured bean?の説明を参照してください。コード以外のSpring Beanのコンテキストを取得するには、この

 context.getAutowireCapableBeanFactory().autowireBean(this); 

のようなものだ、あなたはおそらくContextSingletonBeanFactoryLocatorを使用することができます。しかし、コンストラクタインジェクションを使用してこれを春の豆に寒くすると、はるかに簡単です。

0

あなたはautowiredする必要があるクラスの場合

<bean id="exampleBean" class="examples.ExampleBean"> 
    <constructor-arg><ref bean="anotherExampleBean"/></constructor-arg> 
    <constructor-arg><ref bean="yetAnotherBean"/></constructor-arg> 
    <constructor-arg type="int"><value>1</value></constructor-arg> 
</bean> 

<bean id="anotherExampleBean" class="examples.AnotherBean"/> 
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/> 

public class ExampleBean { 

    private AnotherBean beanOne; 
    private YetAnotherBean beanTwo; 
    private int i; 

    public ExampleBean(AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) { 
     this.beanOne = anotherBean; 
     this.beanTwo = yetAnotherBean; 
     this.i = i; 
    } 
} 

ような何かを試すことができます。詳細については、thisを参照してください。

関連する問題