Java 运行时注释处理

Java 运行时注释处理,java,annotations,Java,Annotations,我的问题如下:;请帮忙 我有一个只适用于我希望在运行时处理的方法的注释,比如 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnno { String name();} 这是我的处理器:

我的问题如下:;请帮忙

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

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

在方法B对“name”的后续调用中,“MyAnnoProcessor”似乎将“name”的值读取为testA而不是testB。我错在哪里了?请告知。

如果要查找单个方法的注释,可以首先使用反射和do a获得该方法。差不多

Class clazz=…//获取类对象 Method=clazz.getMethodA,空

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


注:我不完全确定你的代码是否能编译MyAnnoProcessor,我没有看到任何方法,请尝试遵循方法的命名约定

你能为MyAnnoProcessor类粘贴整个代码吗?你得到了所有的方法,但是在某个时候你应该区分A和B来正确处理注释,对吗?你必须编辑你的问题并粘贴代码。我现在看到的代码更少了。是的,在问题中编辑了它。我不知道如何区分是A还是B叫它。谢谢。我想要一个注释处理器,它只根据传递给注释方法“name”的值返回对象的实例。也就是说,@MyAnnoname=Personpublic void doSthWithperson{//和Person实例在这里通过注释处理器}可用,或者@MyAnnoname=Employee public void doSthWithEmployee{//和Employee实例由注释处理器}可用。如果不将带注释的方法显式地传递给注释处理器,这是可能的吗?