Java 如何执行某些服务只能从服务层调用
我想要一些@Component bean,它应该只从@Service bean调用,而不从其他bean调用。我如何执行它?我不想改变maven的包装。要求运行事务怎么样?但这只是运行时检查,而不是编译时检查。添加一个方面来拦截服务方法调用Java 如何执行某些服务只能从服务层调用,java,spring,Java,Spring,我想要一些@Component bean,它应该只从@Service bean调用,而不从其他bean调用。我如何执行它?我不想改变maven的包装。要求运行事务怎么样?但这只是运行时检查,而不是编译时检查。添加一个方面来拦截服务方法调用 @Around("execution(* MyComponent)") public void wrapAround(ProceedingJoinPoint joinPoint) throws Throwable { joinPoint.procee
@Around("execution(* MyComponent)")
public void wrapAround(ProceedingJoinPoint joinPoint) throws Throwable
{
joinPoint.proceed();
}
看更多
然后检查调用方类
public class KDebug {
public static String getCallerClassName() {
StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
for (int i=1; i<stElements.length; i++) {
StackTraceElement ste = stElements[i];
if (!ste.getClassName().equals(KDebug.class.getName()) && ste.getClassName().indexOf("java.lang.Thread")!=0) {
return ste.getClassName();
}
}
return null;
}
}
并查找调用者是否具有
@Service
注释。如果不抛出异常Nice,但仍然只有运行时解决方案。可以为编译时检查做些什么吗?我怀疑是否有可能进行编译时检查。注释只是一个标记,可以进行间接调用。尽管有点复杂,但有一种方法是创建一些编译器注释处理器。也许我必须等待Java9模块的支持。
for (Annotation annotation : Caller.class.getAnnotations()) {