通过注释引用方法

时间:2017-08-10 15:29:03

标签: java

最近我想到了一个问题,你有一个方法可以执行某种操作,但它不应该直接调用,而是通过另一个正确处理它的方法。

所以我一直在想的是创建一个注释,在其中包含要使用的方法,I.E:

 @NonDirectUsage(direct=MyClass.directMethod);

它必须类似于可以链接引用的注释,但是,我想以这种方式使用它,以便可以通过运行时进一步使用等等。

实时代码中的示例如下:

List<Integer> myList = new ArrayList<>();

@Override
@NonDirectUsage(direct=addToList)
public void add(T t) {
    super.add(t);
}

public void addToList(Integer i) {
   System.out.println("added integer properly: "+i);
   add(i);
}

有没有办法这样做?

1 个答案:

答案 0 :(得分:1)

如果您使用的是Spring,则可以使用AOP

例如,您的注释应类似于:

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

然后定义一个方面

@Aspect
public class NonDirectUsageAspect{

    @Around("@annotation(NonDirectUsage)")
    public Object addToList(ProceedingJoinPoint joinPoint) throws Throwable {
       System.out.println("added integer properly: ");
       return null;
   }
}

不要忘记将您的代码配置为处理方面。

@Configuration  
@EnableAspectJAutoProxy
public class NoDirectUsageConfig {}

如果使用JakartaEE,我认为您可以做类似的事情。