aschoerk:
次のクラスを考えます
private static class ProducedInSubClass {
}
private static class ProducedInSuperClass {
}
public static class SuperClass {
@Produces
public ProducedInSuperClass producedInSuperClass = new ProducedInSuperClass();
}
public static class SubClass extends SuperClass {
@Produces
ProducedInSubClass producedInSubClass = new ProducedInSubClass();
}
public static class BeanWithSubClass {
@Inject
SubClass subClass;
@Inject
ProducedInSuperClass producedInSuperClass;
@Inject
ProducedInSubClass producedInSubClass;
}
ProducedInSuperClassの注入は不満ままです。CDI-スペック章4.2と一致していることを、私は知っています。
この作品を作るために、私はでサブクラスを拡張する必要があります
@Produces
ProducedInSuperClass producedInSuperClassInSubClass = producedInSuperClass;
誰もがそのための説明を与えることができますか?なぜ注入し、注釈インターセプタは...プロデューサーを受け継いれていませんが?
Illya Kysil:
なぜ...継承ではなく、生産されていますか?
以下からの抜粋@ProducesのJavaDocを:
プロデューサメソッドやフィールドは、Beanのサブクラスによって継承されません。
プロデューサメソッドやフィールドは継承されることになるならば、そこに存在するであろう複数のBeanを...噴射点への注入の対象としてCDI扱いあいまいな依存関係。
一方、CDIをサポートプロデューサメソッドの特殊化を:
@Mock
public class MockShop extends Shop {
@Override @Specializes
@Produces
PaymentProcessor getPaymentProcessor() {
return new MockPaymentProcessor();
}
@Override @Specializes
@Produces
List<Product> getProducts() {
return PRODUCTS;
}
...
}