最近我想到了一个问题,你有一个执行某种操作的方法,但它不应该直接调用,而应该通过另一个正确处理它的方法调用。
因此,我一直在想做的是创建一个注释,该注释将包含要使用的方法,即:
@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);
}
有什么办法吗?
如果你使用的是 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,您可以做类似的事情。