我是Java EE中的上下文依赖注入的新手(我在EE 6上),我想请教一下我遇到的问题:
假设您声明此注释:
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier
public @interface MaxPassengers {}
在不同的类中,我说当使用@MaxPassengers批注时,getMaxPassengers方法产生要注入的值:
public class AirplaneInformation implements Serializable {
@Produces @MaxPassengers Integer getMaxPassengers() {
return 250;
}
}
在第三类中,我将@MaxPassengers注入变量中:
@MaxPassengers
@Inject
private Integer maxPassengers;
所有这一切都很好,但是这里有一个转折点:
如果我想更改签名怎么办
@Produces @MaxPassengers整数getMaxPassengers()
至
@产生@MaxPassengers整数getMaxPassengers(String planeType)
并根据planeType返回maxPassengers的动态值。
我想知道是否可以这样做,如果可以,如何更改以下注释
@MaxPassengers
@Inject
private Integer maxPassengers;
还提供了planeType参数。
感谢您的帮助,
-丹尼尔
最佳答案
这样做的方法是将planeType
作为@NonBinding
添加到限定符。然后,您可以将InjectionPoint
对象传递给您的方法,并以此方式查找MaxPassengers
:injectionPoint.getAnnotated().getAnnotation(MaxPassengers.class);
如果要在运行时进行处理,可以使用Instance
对象和AnnotationLiteral
的MaxPassengers
,如下所示:
@Inject @Any
private Instance<Integer> integerInstance;
...
integerInstance.select(new MaxPassengersLiteral("foo")).get();