【问题标题】:CDI Qualifier InheritcanceCDI 限定符继承
【发布时间】:2015-05-07 13:55:20
【问题描述】:

有没有办法在 CDI 中做类似的事情:

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface ServerConfiguration {

  @Nonbinding String url() default "http://localhost:8080";

  @Nonbinding String username() default "";

  @Nonbinding String password() default "";

}

然后定义第二个类似的注解:

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@ServerConfiguration(username = "abc123")
public @interface MainServer {

}

有可能为服务器配置设置一个生产者,但有可能指定不同的默认配置?

服务器配置只是一个例子,但它说明了我的意思。基本上是一个通用限定符,如果需要可以专门化。

谢谢!

【问题讨论】:

    标签: java nested cdi inherited


    【解决方案1】:

    这不是 CDI/Qualifier 特定的,它是 Java 注释问题。您可以获取注释的注释,然后读取值。这是一个小例子:

    @MainServer
    public String annotatedField = "nn";
    
    Field field = getClass().getField("annotatedField");
    MainServer server = field.getAnnotation(MainServer.class);
    
    ServerConfiguration configuration = server.annotationType().getAnnotation(ServerConfiguration.class);
    
    String url = configuration.url(); // localhost:8080
    String username = configuration.username(); // abc123
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多