[英]CDI method injection and bean inheritance in Java
What I want to do - I have a child and parent class. 我想做的-我有一个孩子和一个父母班。 Child has SimpleFoo, Parent needs Advaced foo.
孩子有SimpleFoo,父母需要Advaced foo。 So,
所以,
@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);
}
}
I know that I can do it via constructor injection but I need method injection. 我知道我可以通过构造函数注入来实现,但是我需要方法注入。 How to do it?
怎么做? Can it be done without using names (like
MyBean1
) but only using classes ( AdvancedFoo
)? 是否可以不使用名称(例如
MyBean1
)而仅使用类( AdvancedFoo
)来完成?
Use qualifiers - you now have two beans which both fulfill your requirements on type; 使用限定符-您现在拥有两个都符合类型要求的bean; you need to limit that and qualifiers are made for such cases.
您需要对此进行限制,并且限定词是针对此类情况的。
Here is how to do it, first the qualifier: 首先是预选赛:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.PARAMETER, ElementType.FIELD, ElementType.METHOD })
public @interface MyQualifier {
}
Now, make your AdvancedFoo
bean use that qualifier: 现在,让您的
AdvancedFoo
bean使用该限定符:
@Dependent
@MyQualifier
public class AdvancedFoo extends SimpleFoo {
...
}
And finally, in the init method, inject a bean of type SimpleFoo
and with qualifier @MyQualifier
: 最后,在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.