2011-08-11 2 views
4

私は2つのコンポーネントABを持っています。 ABに依存します。それは完全によく働いた春の自動配線と注釈設定

public class A { 
    private B b; 
    @Autowired 
    public void setB(B b) { 
     this.b = b; 
    } 
} 

@Component 
public class B {} 

new XmlBeanFactory(new FileSystemResource("./spring.xml")).getBean(A.class); 

設定

<context:annotation-config/> 
<context:component-scan 
    base-package="com"> 
</context:component-scan> 

<bean class="com.A" autowire="byType" /> 

:私は次のように書きました。今私はAも注釈で構成したい。だから私はA

@Component 
public class A { 
    private B b; 
    @Autowired 
    public void setB(B b) { 
     this.b = b; 
    } 
} 

に@Component注釈を追加し、設定からA記述を削除しました。だから、ただ

<context:annotation-config/> 
<context:component-scan 
    base-package="com"> 
</context:component-scan> 

しかし、Bはもはや注入されません。おそらく私はautowiringタイプかsmtをそのように指定するべきです。だから私はそれを修正することができますか?

+0

例外が発生するのですか、「B」は単に「ヌル」ですか?両方のクラスが同じパッケージに入っていますか? –

+0

@Benjamin Muschkoちょうどヌルです。同じパッケージで。すべてのクラスを 'com'パッケージに入れます –

答えて

5

あなたはApplicationContext代わりの平野BeanFactoryを使用する必要があります。 BeanFactoryのようなものは、@Autowired注釈を探しているものを含め、ポストプロセッサーを実行していないようです。私はその間の試みで、そのための文書の一部を見つけようとします:

new ClassPathXmlApplicationContext("/spring.xml").getBean(B.class); 

ところで@Autowiredsource)などセッター、コンストラクタ、フィールド、に完全に有効です。

マークスAコンストラクタ、フィールド、セッターメソッド、またはコンフィグレーションメソッドを使用して、Springの依存性注入機能によってオートワイヤードされるようにします。

+0

ありがとう。それは私が望むのと同じように機能します。 –

+1

これはhttp://static.springsource.org/spring/docs/3.0.x/reference/beans.html#context-introduction-ctx-vs-beanfactoryの後のドキュメントです –