application.properties值是否可以在注释声明中使用,或更普遍地在 Interfance 中使用? 例如,我有:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EndLogging {
String BusinessOperationName() default "NOME_BUSINESSOPERATIONNAME_UNDEFINED";
String ProcessName() default "NOME_MICROSERVZIO_UNDEFINED";
}
但是我希望该方法返回的默认值为application.properties值,例如:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EndLogging {
String BusinessOperationName() default @Value("${business.value}");
String ProcessName() default @Value("${process.value}");
}
答案 0 :(得分:5)
否,这不可能(直接)。
注释属性的默认值必须是编译时常量。您尝试从application.properties
注入的值不是编译时常量。
您可以做的是使用特殊标记值作为默认值,然后在处理注释的逻辑中识别该特殊标记值,然后使用例如从属性文件中获取的值。
例如,如果您将使用@EndLogging
注释的第一个版本,并且有一个处理该注释的Spring bean,它将看起来像这样:
// Class that processes the @EndLogging annotation
@Component
public class SomeClass {
@Value("${business.value}")
private String defaultBusinessOperationName;
@Value("${process.value}")
private String defaultProcessName;
public void processAnnotation(EndLogging annotation) {
// ...
String businessOperationName = annotation.BusinessOperationName();
if (businessOperationName.equals("NOME_BUSINESSOPERATIONNAME_UNDEFINED")) {
businessOperationName = defaultBusinessOperationName;
}
String processName = annotation.ProcessName();
if (processName.equals("NOME_MICROSERVZIO_UNDEFINED")) {
processName = defaultProcessName;
}
// ...
}
}