2016-03-31 12 views
2

Spring 3.Xでは、フィールドをAutowireに入れるためにクラスにコンポーネントとして注釈を付ける必要がありますか?Springクラスは、プロパティをAutoWireにするためのコンポーネントでなければなりませんか?

のは、私が持っているとしましょう:

@Service("myBean") 
public class Mybean { 

} 

public class Target { 
    @Autowired 
    @Qualifier("myBean") 
    private MyBean; 
} 

そしてMyBean.javacom.package.beans.MyBean package内にあるその後、私のbeans.xmlの中

<context:component-scan base-package="com.package.beans" /> 

クラスTargetには@Componentなどのアノテーションを付ける必要がありますか?そのフィールドの1つをオートワイヤーするには?

答えて

0

いいえ、注釈を付ける必要はありませんが、Spring Beanである必要があります。 @Componentのようなステレオタイプのアノテーションを使用して行うこともできますが、XMLに<bean>要素を宣言するか、またはコンフィグレーションメソッド@Beanから返すことでSpring Beanを作成することもできます。

autowiringに違いはないものの、テストをはるかに容易にし、特定の間違いをより困難にするので、コンストラクタインジェクションを使用することが望ましいことに注意してください。

+0

"Target"にComponent( "target")を注釈した後でさえ、nullをautowiresし、クラスがあるパッケージでコンポーネントスキャンを設定しました。実際、同じパッケージ内の他のクラスコンポーネントを注釈したものの、コンポーネント( "ターゲット")注釈の後に "Target"が残っていないということはありません。どんなアイデアが間違っているのでしょうか? –

+0

あなたはほぼ確実に 'new Target()'を呼び出しています。それは私が言いました "間違い"です。 – chrylis

+0

私がeclipseにロードしたすべてのプロジェクトを検索すると、「new Target()」が1つも発生しません。これは問題ではありません。 –