CDI 限定符继承
CDI Qualifier Inheritcance
有没有办法在 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 {
}
有可能为服务器配置设置一个生产者,但有可能指定不同的默认配置?
服务器配置只是一个示例,但它表明了我的意思。基本上是一个通用限定符,如果需要可以专门化。
谢谢!
这不是 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
有没有办法在 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 {
}
有可能为服务器配置设置一个生产者,但有可能指定不同的默认配置?
服务器配置只是一个示例,但它表明了我的意思。基本上是一个通用限定符,如果需要可以专门化。
谢谢!
这不是 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