Java 从容器类获取限定符
我想知道是否有办法指定子类应该获得容器类的限定符。例如:Java 从容器类获取限定符,java,cdi,Java,Cdi,我想知道是否有办法指定子类应该获得容器类的限定符。例如: @Blue @Default public class Container { @Inject MyClass c; } 现在,如果我使用@Bluequalifier注入容器类,有没有办法告诉我MyClass实例也应该使用相同的限定符注入?如果不是,它要求我为每种情况创建一个生产者,并在类容器中创建一个构造函数 实现这一点的一种方法是为MyClass创建一个生产者。生产者方法必须将InjectionPoint作为参数,因
@Blue
@Default
public class Container {
@Inject
MyClass c;
}
现在,如果我使用@Bluequalifier注入容器类,有没有办法告诉我MyClass实例也应该使用相同的限定符注入?如果不是,它要求我为每种情况创建一个生产者,并在类容器中创建一个构造函数 实现这一点的一种方法是为MyClass创建一个生产者。生产者方法必须将InjectionPoint作为参数,因为我们需要关于声明类的信息。这可以通过使用InjectionPointgetBean实现 有了这些信息,我们现在可以选择我们感兴趣的限定符了。我建议引入一个@Transferable注释,限定符定义应该使用它,使其更通用 至少生产者bean必须获得MyClass的所有可能实例。这可以通过使用实例来实现 至少我们必须迭代实例并选择MyType的匹配实现 实现可以如下所示: @可转让 @蓝色的 MyClassProducer
您是否希望将限定符从您案例中的声明类容器转移到注入的bean中?我想知道您希望用它实现什么,因为这意味着您需要为每个注入的bean提供一个用传递的限定符注释的实现。是的,当然,我需要一个生产者。所以我需要一个@Blue制作人来为我的班级服务。如果这是不可能的,我需要为每个可能的限定符声明一个容器版本。。。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Transferable {
}
@Qualifier
@Transferable
@Retention(RetentionPolicy.RUNTIME
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface Blue {
}
public class MyClassProducer {
@Inject
private Instance<MyClass> myClasses;
@Produces
@Any
public MyClass getMyClassFromTransferedAnnotations(InjectionPoint ip) {
Set<Annotations> qualifiers = ip.getBean().getQualifiers();
for(Annotation an : annotations) {
if(an.getAnnotationType().isAnnotationPresent(Transferable.class)) {
return myClasses.select(an.getAnnotationType);
}
}
return null; // Todo : think about throwing an UnsatisfiedDependenciesException
}
}