アノテーションインターフェース Primary


複数の候補が単一値の依存関係をオートワイヤーする資格がある場合、Bean を優先する必要があることを示します。候補の中に「プライマリ」Bean が 1 つだけ存在する場合、オートワイヤー値になります。

このアノテーションは、Spring XML の <bean> 要素の primary 属性と意味的に同等です。

直接または間接的に @Component でアノテーションが付けられたクラス、または @Bean でアノテーションが付けられたメソッドで使用できます。

サンプル

 @Component
 public class FooService {

     private FooRepository fooRepository;

     @Autowired
     public FooService(FooRepository fooRepository) {
         this.fooRepository = fooRepository;
     }
 }

 @Component
 public class JdbcFooRepository extends FooRepository {

     public JdbcFooRepository(DataSource dataSource) {
         // ...
     }
 }

 @Primary
 @Component
 public class HibernateFooRepository extends FooRepository {

     public HibernateFooRepository(SessionFactory sessionFactory) {
         // ...
     }
 }
 

HibernateFooRepository は @Primary でマークされているため、両方が同じ Spring アプリケーションコンテキスト内の Bean として存在すると想定して、jdbc ベースのバリアントよりも優先的に注入されます。これは、コンポーネントスキャンが自由に適用される場合によく見られます。

コンポーネントスキャンが使用されていない限り、クラスレベルで @Primary を使用しても効果がないことに注意してください。@Primary アノテーション付きクラスが XML を介して宣言されている場合、@Primary アノテーションメタデータは無視され、代わりに <bean primary="true|false"/> が考慮されます。

導入:
3.0
作成者:
Chris Beams, Juergen Hoeller
関連事項: