我开发了一个简单的注释界面
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface CustomAnnotation {
String foo() default "foo";
}
然后我测试它注释一个类
@CustomAnnotation
public class AnnotatedClass {
}
public void foo() {
CustomAnnotation customAnnotation = AnnotatedClass.class.getAnnotation(CustomAnnotation.class);
logger.info(customAnnotation.foo());
}
并且一切正常,因为它记录了foo.我也尝试将注释类更改为@CustomAnnotation(foo =“123”),所有工作都正常,因为它记录了123.
现在我希望application.properties检索传递给注释的值,所以我已将注释类更改为
@CustomAnnotation(foo = "${my.value}")
public class AnnotatedClass {
}
但现在日志返回String ${my.vlaue}而不是application.properties中的值.
我知道可以在注释中使用${}指令,因为我总是使用像@GetMapping这样的@RestController(path =“${path.value:/}”)并且一切正常.
我在Github存储库上的解决方案:https://github.com/federicogatti/annotatedexample
您可以做的是,您可以将foo值作为字符串传递给@CustomAnnotation(foo =“my.value”)并创建建议AOP以获取注释字符串值并在应用程序属性中查找.
使用@pointcut创建AOP,@ AfterReturn或提供其他匹配@annotation,方法等,并将您的逻辑写入查找属性以获取相应的字符串.
>在主应用程序上配置@EnableAspectJAutoproxy或按配置类进行设置.
>添加aop依赖项:spring-boot-starter-aop
>使用切入点创建@Aspect.
@Aspect
public class CustomAnnotationAOP {
@pointcut("@annotation(it.federicogatti.annotationexample.annotationexample.annotation.CustomAnnotation)")
//define your method with logic to lookup application.properties
在官方指南中查看更多内容:Aspect Oriented Programming with Spring
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。