java - Java EE 中的上下文依赖影响

标签 java jakarta-ee cdi

我是 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返回ma​​xPassengers的动态值。

我想知道这是否可以完成,如果可以,我该如何更改以下注释

@MaxPassengers
@Inject
private Integer maxPassengers;

还提供planeType参数。

感谢您的帮助, -丹尼尔

最佳答案

完成此操作的方法是将planeType 添加到限定符作为@NonBinding。然后,您可以将 InjectionPoint 对象传递给您的方法,并通过以下方式查找 MaxPassengers: injectionPoint.getAnnotated().getAnnotation(MaxPassengers.class);

如果您想在运行时拉起它,您可以使用 Instance 对象和 MaxPassengersAnnotationLiteral,如下所示:

@Inject @Any
private Instance<Integer> integerInstance;


...

integerInstance.select(new MaxPassengersLiteral("foo")).get();

关于java - Java EE 中的上下文依赖影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26198563/

相关文章:

java - 选择 Apache Tomcat 服务器导致 Java EE 下拉菜单失败,NetBeans 7.4

jakarta-ee - 如何使用 JMS 适配器监听 Amazon SQS

java - Liquibase CDI 集成

java - 如何在应用程序中组织和管理多个数据库凭据?

java - 从不同模块加载 Freemarker 模板

java.io.EOFException : Unexpected end of ZLIB input stream using Apache POI

hibernate - org.jboss.weld.exceptions.IllegalArgumentException : WELD-001456: Argument resolvedBean must not be null

java - isEqualToComparingFieldByField 失败,但 isEqualToComparingFieldByFieldRecursively 正在通过

java - java中捕获get请求

java - 使用 Qualifier 和 InjectionPoint 作为 @HttpParam 在 CDI/WELD 中实现 @RequestParam