2 回答
TA贡献1836条经验 获得超4个赞
出现异常似乎是因为 CDI 没有找到使用 @Any 和 @MyAnnotation 注释的 bean,因为您要选择的 bean 仅使用 @MyAnnotation 进行了注释。我认为 @Any 在 Instance 注入中不是必需的,因为 Instance 将能够访问 MyInterface 的所有实现,因此您可以选择带有 @MyAnnotation(MyEnum.value) 注释的那个。我从来没有使用带有限定符的实例,它使用枚举。
我认为您不需要使用 Instace。以下注入不起作用吗?
class MyDelegate implements MyInterface{
@Inject
@MyAnnotation(MyEnum.value)
private MyInterface myInterface;
}
如果您需要委托给另一个实现,那么您可能需要 CDI 装饰器。
@Decorator
@Default // We decorate the default implementation of MyInterface or any qualified
// one you need to decorate
abstract class MyDecorator implements MyInterface {
@Inject
@MyAnnotation(MyEnum.value)
private MyInterface myInterface;
@Inject
@Delegate
private MyInterface delegate;
// Implement all methods you want to decroate
public void myMethod(){
if(condition) {
myInterface.myMethod();
} else {
delegate.myMethod();
}
}
}
您需要在 beans.xml 中注册装饰器
<decorators>
<class>MyDecorator</class>
</decorators>
这对你有帮助吗?
添加回答
举报