如何将值传递给自定义注释?

512*_*009 7 java spring annotations

我的查询是这样的。说,我有一个自定义注释如下:

                    //rest of the code left out for the sake of brevity
                    interface @Name{
                        String myName();
                    }
Run Code Online (Sandbox Code Playgroud)

现在,在使用此注释的类中,例如字段或方法,我想将值从属性文件传递给“myName”,如下所示:

                    @Name(myName="${read.my.name}")
                    public void something(){}
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议我如何从属性文件中读取我的注释处理器中传递给“myName”的值?我已经阅读了一些关于使用占位符然后使用 @Value 的内容,但我不确定我可以/应该使用这种方法,比如说,一个服务类,我只想在其中标记一个带有此注释的带注释的字段或方法?任何指导将不胜感激。

感谢致敬!

hoi*_*loi 4

这是我的方法级注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Name {

    public String myName();

}
Run Code Online (Sandbox Code Playgroud)

这是一个声明注释的虚拟类:

public class Z {

    @Name(myName = "George")
    public void something() {

    }
}
Run Code Online (Sandbox Code Playgroud)

获取该值的方法如下:

final Method method = Z.class.getMethod("something");
if (method.isAnnotationPresent(Name.class)) {
    final Annotation annotation = method.getAnnotation(Name.class);
    final Name name = (Name) annotation;
    System.out.println(name.myName()); // Prints George
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我不想传递 @Name(myName="George")。我想将“George”存储在“property.name.george”下的属性文件中,然后将其传递给 @Name(myName="${property.name.george}") 之类的内容,然后在我的注释处理器中我应该能够将“property.name.george”中存储的值读取为“George”。希望我能澄清要求。 (3认同)
  • 所以我想出了一种解决办法;发布在这里,供以后任何人参考。由于发布的需求希望在运行时读取属性值,并且注释在编译时处理;因此,在我的 beanpostprocessor 中,我只是提取传递给“myName”的值并从属性文件中读取,就像在通常情况下读取一样。 (3认同)