最近我想到了一个问题,你有一个方法可以执行某种操作,但它不应该直接调用,而是通过另一个正确处理它的方法。
所以我一直在想的是创建一个注释,在其中包含要使用的方法,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);
}
有没有办法这样做?
答案 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,我认为您可以做类似的事情。