我想要一些@Component bean,只能从@Service bean调用,而不能从其他bean调用。我该如何执行呢?我不想改变maven包装。那要求运行交易怎么样?但它只是运行时而不是编译时检查。
答案 0 :(得分:1)
添加一个方面来拦截服务方法调用。
@Around("execution(* MyComponent)")
public void wrapAround(ProceedingJoinPoint joinPoint) throws Throwable
{
joinPoint.proceed();
}
查看更多here
然后检查来电者类
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;
}
}
来自here
检查调用者类是否有注释
for (Annotation annotation : Caller.class.getAnnotations()) {
并查找调用者是否有@Service
注释。如果没有抛出异常