アノテーションインターフェース Primary
複数の候補が単一値の依存関係をオートワイヤーする資格がある場合、Bean を優先する必要があることを示します。候補の中に「プライマリ」Bean が 1 つだけ存在する場合、オートワイヤー値になります。
プライマリ Bean は、単一のインジェクションポイントの複数の候補を見つける場合にのみ効果があります。配列、コレクション、マップ、ObjectProvider ストリームをオートワイヤーする場合、型一致するすべての Bean が含まれます。
このアノテーションは、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
- 関連事項: