我是 Java EE 中的上下文依赖注入(inject)新手(我使用的是 EE 6),我想询问一下我遇到的问题:
假设您声明此注释:
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier
public @interface MaxPassengers {}
在另一个类中,我说 getMaxPassengers 方法会在使用 @MaxPassengers 注释时生成要注入(inject)的值:
public class AirplaneInformation implements Serializable {
@Produces @MaxPassengers Integer getMaxPassengers() {
return 250;
}
}
在第三节课中,我将 @MaxPassengers 注入(inject)到变量中:
@MaxPassengers
@Inject
private Integer maxPassengers;
所有这些都很好,但这里有一个转折点:
如果我想更改签名怎么办 @Produces @MaxPassengers Integer getMaxPassengers() 到 @Produces @MaxPassengers Integer getMaxPassengers(StringplaneType)
并根据planeType返回maxPassengers的动态值。
我想知道这是否可以完成,如果可以,我该如何更改以下注释
@MaxPassengers
@Inject
private Integer maxPassengers;
还提供planeType参数。
感谢您的帮助, -丹尼尔
最佳答案
完成此操作的方法是将planeType
添加到限定符作为@NonBinding
。然后,您可以将 InjectionPoint
对象传递给您的方法,并通过以下方式查找 MaxPassengers
: injectionPoint.getAnnotated().getAnnotation(MaxPassengers.class);
如果您想在运行时拉起它,您可以使用 Instance
对象和 MaxPassengers
的 AnnotationLiteral
,如下所示:
@Inject @Any
private Instance<Integer> integerInstance;
...
integerInstance.select(new MaxPassengersLiteral("foo")).get();
关于java - Java EE 中的上下文依赖影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26198563/