我是Java EE中的上下文依赖注入的新手(我在EE 6上),我想问一下我遇到的事情:
让我们说你宣布这个注释:
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Qualifier
public @interface MaxPassengers {}
在另一个课程中,我说 getMaxPassengers 方法会在使用 @MaxPassengers 注释时生成要注入的值:
public class AirplaneInformation implements Serializable {
@Produces @MaxPassengers Integer getMaxPassengers() {
return 250;
}
}
在第三节课中,我将@MaxPassengers注入变量:
@MaxPassengers
@Inject
private Integer maxPassengers;
这一切都很棒,但这就是扭曲:
如果我想改变签名怎么办? @Produces @MaxPassengers整数getMaxPassengers() 至 @Produces @MaxPassengers整数getMaxPassengers(String planeType)
根据 planeType 返回 maxPassengers 的动态值。
我想知道是否可以这样做,如果是,我该如何更改以下注释
@MaxPassengers
@Inject
private Integer maxPassengers;
还提供 planeType 参数。
感谢您的帮助, -Daniel
答案 0 :(得分:1)
这样做的方法是将planeType
添加到限定符@NonBinding
。然后,您会将InjectionPoint
对象传递给您的方法并以这种方式查找MaxPassengers
:injectionPoint.getAnnotated().getAnnotation(MaxPassengers.class);
如果你想在运行时提起这个问题,你可以使用Instance
个对象和AnnotationLiteral
的{{1}},如下所示:
MaxPassengers