运行时注释处理

时间:2014-09-16 13:36:06

标签: java annotations

我的问题如下;请协助。

我有一个适用于我想在运行时处理的方法的注释,比如说

                    @Target(ElementType.METHOD)
                    @Retention(RetentionPolicy.RUNTIME)
                     public @interface MyAnno {
                          String name();}

这是我的处理器:

                   public class MyAnnoProcessor(Class cls){
                        Method[] m = cls.getClass().getMethods();
                        ...// read the value passed to name and create an instance of an object depending on the value of 'name'

是。 MyAnnoProcessor代码如下:

              public class MyAnnoProcessor(Class cls){
                 Method[] methods = cls.getMethods();
                 for(Method m: methods){
                    MyAnno an = (MyAnno) m.getAnnotation(MyAnno.class);
                    if(an!=null)
                       sysout(an.name());
                       ....//call another method to create a class based on the value passed to 'name'

现在,我有一个类,我想编写许多用@MyAnno注释的方法,但每个方法都将不同的值传递给“name”。我只是无法找到一种理想的方式来处理注释处理? 'MyAnnoProcessor'应该如何知道需要将哪个(对象)返回到哪个方法?

说,我在方法A:

中这样做
                @MyAnno(name="testA")
                public void A(){
                    MyAnnoProcessor(this); 
                ...}

我再次在方法B中这样做:

                  @MyAnno(name="testB")
                  public void B(){
                     MyAnnoProcessor(this);
                  ...}

'MyAnnoProcessor'似乎在方法B的后续调用中将'name'的值读作“testA”而不是“testB”。我哪里错了?请指教。

1 个答案:

答案 0 :(得分:0)

如果要查找单个方法的注释,可以先使用反射获取方法,然后执行getDeclaredAnnotations()。像

这样的东西

Class clazz = ...//obtain class object Method method = clazz.getMethod("A", null);

或者,使用您当前的代码,您仍然可以遍历所有方法,并通过在m.getName()循环中执行for来匹配方法名称,以找出您正在查看的方法马上。

P.S:我不完全确定你的代码会编译(MyAnnoProcessor,我没有看到任何方法),请尝试遵循方法的命名约定)