これら 2 つが @Inject を使用してインジェクションを行う正確な方法を理解したかどうかはわかりませんが、開発の最初のフェーズで HK2 の @inject を使用して依存性注入を使用し、抽象バインダーを使用してリソースをバインドするアプリを最近開発しました。 、それはうまくいきました。それから、もう1つの値を注入したかったのです。@Inject を使用して基本的な String 値を注入する必要があり、この値は @Produces で注釈が付けられたメソッドから取得されました。しかし、そうすると、このエラーが発生します。
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=String
私は多くの場所を読みましたが、CDI と HK2 の連携に問題があることを多くの人が示唆しています。私はこの問題を解決できません。
上記のシナリオを 2 つの異なるスタンドアロン プログラムで試すと、問題なく動作しますが、それらを統合すると、上記のエラー メッセージが表示されます。
これは私がJavaのjiraで見つけたものです: https://java.net/jira/browse/GLASSFISH-20597
私の例は次のとおりです。
public ClassA{
@Inject
ClassBInter b;
}
抽象バインダーでクラス b をバインドしました
new AbstractBinder(){
@Override
protected void configure() {
//Binding the implementation to the interface
bind(ClassBImpl.class).to(ClassBInter.class);
}
}
これはうまくいきました。
しかし、同じシステムで@InjectをStringに追加するという以下の概念を試したところ、上記の例外でクラッシュしました
public ClassC{
@Inject
String name;
}
プロデューサークラス
public ProducerClass{
@Produces
public String getName(){
return "henry Ford";
}
}