[英]CDI method injection and bean inheritance in Java
我想做的-我有一个孩子和一个父母班。 孩子有SimpleFoo,父母需要Advaced foo。 所以,
@Dependent
public class SimpleFoo {
}
@Dependent
public class AdvancedFoo extends SimpleFoo {
}
@Dependent
public class Child {
private SimpleFoo foo;
@Inject
protected void setFoo(SimpleFoo foo) {
this.foo = foo;
}
}
@Dependent
public class Parent extends Child {
@Inject
@Override
protected void setFoo(SimpleFoo foo) { //How to inject here AdvancedFoo
super.setFoo(foo);
}
}
我知道我可以通过构造函数注入来实现,但是我需要方法注入。 怎么做? 是否可以不使用名称(例如MyBean1
)而仅使用类( AdvancedFoo
)来完成?
使用限定符-您现在拥有两个都符合类型要求的bean; 您需要对此进行限制,并且限定词是针对此类情况的。
首先是预选赛:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD })
public @interface MyQualifier {
}
现在,让您的AdvancedFoo
bean使用该限定符:
@Dependent
@MyQualifier
public class AdvancedFoo extends SimpleFoo {
...
}
最后,在init方法中,注入类型为SimpleFoo
并带有限定符@MyQualifier
:
@MyQualifier
public class Parent extends Child {
@Inject
protected void setFoo(@MyQualifier SimpleFoo foo) {
this.foo = foo;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.