猜猜我有这些方法:
componentDidMount
我想知道如何捕获@Service
public class Service1 {
private @Autowired Service2 service2;
public void method1() {
this.service2.method2();
}
}
@Service2
public class Service2 {
public void method2() {
// Do something
}
}
上的Service2.method2()
呼叫,。
有什么想法吗?
答案 0 :(得分:1)
您可以use AspectJ from within Spring代替Spring AOP进行编译时或加载时编织,然后使用类似的切入点
execution(* my.package.Service2.method2()) &&
cflow(execution(* my.package.Service2.method2()))
或者类似于 @Damith 所说的,使用以下任一方法
Thread.currentThread().getStackTrace()
,new Exception().getStackTrace()
或StackWalker
API 以便手动导航调用堆栈并找到您要查找的信息。我的建议是使用AspectJ,不仅因为它的优雅,而且因为它的效率。
答案 1 :(得分:0)
在您的服务包周围写一个方面,类似于下面的示例。 @Around可以在这里提供帮助,您可以在此之前和之后进行控制。
joinPoint.proceed(); 将调用您的服务方法。
@Around(value = "(execution(* com.example.services.*.*(..)) ")
public Object aroundResourceLayerMethods(ProceedingJoinPoint joinPoint) throws Throwable {
// Print the Source Object
System.out.println("Called from + "+ joinPoint.getSignature().getDeclaringType());
System.out.println("Target + "+ joinPoint.getTarget());
Object returnValue = null;
try {
// Calling the code
returnValue = joinPoint.proceed();
} catch (Throwable e) {
throw (e);
}
return returnValue;
}
joinPoint.getSignature()。getDeclaringType()将为您提供正在调用的对象。
joinPoint.getTarget()将为您提供目标对象。
您可以对目标对象应用条件以获得所需的结果。
希望获得帮助。