1.概要
今日、あなたが見て春のフレームワーク@Qualifier
、それが解決しどのような問題、メモ、およびその使用方法。我々はまた、それが理解@Primary
で異なる音です。その他の技術的な分析をご覧くださいfelord.cn
2.痛みのポイント
使用@Autowired
注釈がある春の偉大な依存性注入方法。しかし、いくつかのシーンだけでは十分では、注入したいものを最後にこのコメントの春のノウハウを作るために豆を。デフォルトでは、@Autowired
アセンブリの種類に応じて春の豆。容器の同じタイプが複数ある場合豆、フレームワークがスローされるNoUniqueBeanDefinitionException
複数の条件が満たされている警告するビーン自動アセンブリ。プログラムは1が使用する権利判断を下すことができない、ここに鮮やかな例です。
@Component("fooFormatter")
public class FooFormatter implements Formatter {
public String format() {
return "foo";
}
}
@Component("barFormatter")
public class BarFormatter implements Formatter {
public String format() {
return "bar";
}
}
@Component
public class FooService {
@Autowired
private Formatter formatter;
//todo
}
复制代码
我々がしようとした場合FooService
、当社のコンテキストにロードし、春のフレームワークがスローされますNoUniqueBeanDefinitionException
。これは、春には注入するかわからなかった豆を。この問題を回避するには、いくつかのソリューションがあります。私たちは、紙に説明する必要がありますので@Qualifier
注意事項をその一つです。下がる小さな脂肪の弟のリズムに従ってください。
3. @Qualifier
使用することにより@Qualifier
、我々は注入する必要がなくなります注釈、豆の問題を。レッツは、私たちがどのように見含めることによって、前の例を再訪@Qualifier
私たちはどの注釈を使用したいということが出てくる豆の問題を解決するために:
@Component
public class FooService {
@Autowired
@Qualifier("fooFormatter")
private Formatter formatter;
//todo
}
复制代码
@Qualifier
Notesと私たちは、特定の使用したいのSpring Beanは名前、一緒に組み立て春の同じ型と会うアセンブリの要件のいくつかのフレームワーク缶Beanは、我々が欲しいものを見つけると、回避春のスプリットブレイン。私たちは、名前を決定する@Componentまたはvalueプロパティ@Bean注釈文です行う必要があります。実際に、私たちもできるFormatter
実装クラスの使用@Qualifier
、ノートの代わりに@Component
、または@Bean
指定した名前で、同じ効果を得ることができます。
@Component
@Qualifier("fooFormatter")
public class FooFormatter implements Formatter {
public String format() {
return "foo";
}
}
@Component
@Qualifier("barFormatter")
public class BarFormatter implements Formatter {
public String format() {
return "bar";
}
}
复制代码
- @Qualifier VS @Primary別呼ばある
@Primary
アノテーションは、我々はまた、場合に発生注入曖昧にその依存性注入を決定するために使用することができる豆。同じタイプの複数ある場合ビーン時間、このアノテーションは、プリファレンスを定義しました。特に指定しない限り、我々は、使用する@Primary
注釈関連するBeanを。例で見てみましょう:
@Bean
public Employee tomEmployee() {
return new Employee("Tom");
}
@Bean
@Primary
public Employee johnEmployee() {
return new Employee("john");
}
复制代码
この例では、2つの方法は、同じ戻りあるEmployee
タイプ。スプリングは、注入された豆の方法は、johnEmployee
返し豆を。それが含まれているためです@Primary
注釈を。私たちはデフォルトを指定したい場合には、特定の型の中に注入されるべき豆このコメントに便利。我々はいくつかの点で他の注入が必要な場合は豆、我々は、具体的にそれを指摘する必要があります。我々はできる@Qualifier
このコメントを行います。例えば、我々は使用することができ@Qualifier
、我々は、アノテーションを使用することを指定するには、tomEmployee
メソッドの戻りBeanを。それは場合、ことは注目に値する@Qualifier
と@Primary
注釈が存在する場合、@Qualifier
コメントが優先されます。基本的に、@Primary
それはデフォルト値を定義しますが、@Qualifier
非常に具体的です。もちろん、@Component
また、あなたが使用することができる@Primary
の使用例上記の注釈を、または3:
@Component
@Primary
public class FooFormatter implements Formatter {
public String format() {
return "foo";
}
}
@Component
public class BarFormatter implements Formatter {
public String format() {
return "bar";
}
}
复制代码
この場合、@Primary
注釈指定します。デフォルトの注入がされFooFormatter
たシーンに注入あいまいさを排除しました。
名前は自動的に介して注入されます
使用時には@Autowired
組立自動化されたとき、あれば春がない他のヒント、右見つけるために、変数名に基づいて注入される必要があります豆を。依存性の注入はまた、あいまいさの問題を解決することができます。私たちの最初のコードに基づいていくつかの例で見てみましょう:
@Component
public class FooService {
@Autowired
private Formatter fooFormatter;
//todo
}
复制代码
この場合、スプリングは、注入される決定BeanがあるFooFormatter
ので、私たちのフィールド名豆の@Component
又は@Bean
値用い注釈(デフォルトの@Bean
メソッド名)と一致します。
6.まとめ
@Qualifier
探検、我々は、依存性注入の注釈が競合を排除するために使用されている知っています。これは、次のような日常の開発にRabbtimq非常に一般的なキューを宣言しました。脂肪兄弟はまた、組み合わせ、比較注釈及び上記の他の注釈によって、いくつかの小さな一般的な使用方法を示しました。これはあなたを助ける春の依存性注入メカニズムの理解。
关注公众号:Felordcn获取更多资讯