この例を見てみましょう:
public interface MyInterface {
public void foo();
}
および実装クラス:
public class MyInterfaceImpl implements MyInterface {
@Override
public void foo() {...}
}
依存クラス MyResource を MyInterfaceImpl に注入しようとすると、エラーや警告なしで何も起こりませんが、MyResource は注入されないため、コードは NullPointerException で失敗します。
public class MyInterfaceImpl implements MyInterface {
@Inject
private MyResource resource;
@Override
public void foo() {
resource.doAnything() <-- will throw NullPointerException
}
}
これを .war アーカイブにパッケージ化し、単純な Jersey アプリケーションを使用して Glassfish v4 にデプロイしました。また、Beans.xml を WEB-INF と META-INF に配置しようとしました。
MyInterfaceImpl クラスから「implements MyInterface」を削除すると、インジェクションが機能します。インターフェイスを実装するクラスで依存性注入が機能しないのはなぜですか?