Java EE中的上下文依赖注入

时间:2014-10-05 00:48:38

标签: java java-ee cdi

我是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

1 个答案:

答案 0 :(得分:1)

这样做的方法是将planeType添加到限定符@NonBinding。然后,您会将InjectionPoint对象传递给您的方法并以这种方式查找MaxPassengersinjectionPoint.getAnnotated().getAnnotation(MaxPassengers.class);

如果你想在运行时提起这个问题,你可以使用Instance个对象和AnnotationLiteral的{​​{1}},如下所示:

MaxPassengers
相关问题