2016-05-30 6 views
1

それぞれのBeanが名前を持ち、getBean()というメソッドを持っています。これはBean名を受け取り、XML設定でもBeanを名前で注入します。なぜJavaのコンフィグレーションでは、クラスごとに@Autowiredアノテーションに限定されますか?なぜ@Autowiredワイヤーはクラスごとに?

豆を別の構成から1つの構成に注入する従来の方法は何ですか? Beanを名前で参照することは可能ですか?@Qualifierを使用しないでください。

UPDATE

私は構成の間で、名前でautowireする方法を発見。

最初に私はクラスによって全体構成をautowire:

@Autowired 
MySeparateConfig mySeparateConfig; 

その後、私はちょうどそのBeanからのインスタンスメソッドを呼び出します。

@Bean 
MyDependentBean myDependentBean() { 
    MyDependentBean ans = new MyDependentBean(); 
    ans.setProperty(mySeparateConfig.myNamedBeanInDifferentConfig()); 
    return ans; 
} 

Configsを定義することによって、異なるクラスです。

+0

注入に '@ Autowired'を使う必要はありません。 _context.xml_にBeanを定義し、Beanに ''タグを介して対話させることができます。 bean定義タグの中で_i.e._ '

+0

@cihansevenあなたの声明は正しいですか?質問はなぜ@ @ Autowireはクラスによってdepencyを配線するときにデフォルトですか? –

+0

@Dims '@修飾子なしで名前でautowireできるとは思わない –

答えて

1

実際、注釈でBeanを挿入するにはいくつかの方法があります。

たちはこのBeanを持っていることを考えると

<bean id="standardPasswordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" /> 

とJavaクラスで、私たちは

@Value(#{standardPasswordEncoder}) // by bean id 
StandardPasswordEncoder standardPasswordEncoder; 
SPELを私の知る限りでは

@Autowired // by type 
StandardPasswordEncoder standardPasswordEncoder; 

@Autowired 
@Qualifier("standardPasswordEncoder") // by bean id 
StandardPasswordEncoder standardPasswordEncoder; 

[email protected] // by bean id 
StandardPasswordEncoder standardPasswordEncoder; 

[email protected] // by type 
StandardPasswordEncoder standardPasswordEncoder; 

を、それを注入または使用する方法を次のように使用することができます

しかし、私は春のautowiredデフォルトがタイプによるのか、そしてなぜそれなら理由を知りません。私はタイプによってオートワイヤするのは危険だと思う。これがあなたを助けることを願っています。

+1

*「タイプでオートワイヤするのは危険です」*?文字列識別子(またはそれより悪い変数名)を一致させる必要のあるオートワイヤリングは、無害なリファクタリングを潜在的に悲惨にすることによって、より危険です。 – kryger

+0

はい、私はあなたに同意します。javax.annotation.Resourceはより危険です。しかし、spELとQualifierについて言えば、どのBeanが接続されているかがはっきりしていると思います。変数名に依存するのではなく、Bean IDのみに依存します。同じタイプのBeanがある場合は、例外が発生する可能性は低くなります。 –

関連する問題