我想做什么 - 我有一个孩子和父母班级。孩子有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
)吗?
答案 0 :(得分:1)
使用限定符 - 您现在有两个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
的bean:
@MyQualifier
public class Parent extends Child {
@Inject
protected void setFoo(@MyQualifier SimpleFoo foo) {
this.foo = foo;
}
}