gpt4 book ai didi

java - 在接口(interface)注释中使用 application.properties 值

转载 作者:行者123 更新时间:2023-12-03 02:31:40 25 4
gpt4 key购买 nike

application.properties 值可以在注释声明中使用,或更一般地在接口(interface)中使用吗?例如我有:

@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}");
}

最佳答案

不,这不可能(直接)实现。

注释属性的默认值必须是编译时常量。您尝试从 application.properties 注入(inject)的值不是编译时常量。

您可以做的是使用特殊标记值作为默认值,然后在处理注释的逻辑中识别此特殊标记值,然后使用您从属性文件中获取的值。

例如,如果您使用第一个版本的 @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;
}

// ...
}
}

关于java - 在接口(interface)注释中使用 application.properties 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52480799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com