Java 如何在aspectj中将一个方面方法与多个方法关联?
我有一门课Java 如何在aspectj中将一个方面方法与多个方法关联?,java,annotations,aspectj,Java,Annotations,Aspectj,我有一门课a: @Service public class A { public void goX() { System.out.println("goX"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } public void
a
:
@Service
public class A {
public void goX() {
System.out.println("goX");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void goY() {
System.out.println("goY");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
和一个AOP类AOP
:
@Aspect
@Service
class AOP {
@Around("execution(* com.test.A.goX(..))")
public void calExecTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long t1 = System.currentTimeMillis();
proceedingJoinPoint.proceed();
long t2 = System.currentTimeMillis();
System.out.println(t2-t1);
}
}
然后我可以计算方法AOP.calExecTime()
执行A.goX()所需的时间
我想用同样的方法计算A.goX()
和A.goY()
的时间AOP.calExecTime()
,我不知道如何在@周围的注释中编写东西。有人能帮我吗?非常感谢。这可能会有所帮助
@Aspect
@Service
class AOP {
@Around("within(* com.test.*)")
public void calExecTime(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long t1 = System.currentTimeMillis();
proceedingJoinPoint.proceed();
long t2 = System.currentTimeMillis();
System.out.println("Method "+ proceedingJoinPoint.getSignature().getName() + " time : "+ t2-t1);
}
}
谢谢回复!如果goX
和goY
属于不同的类别,该怎么办?如果有任何方法可以在@中写入和执行
?是的,您可以在(您的包。*)中使用,而不是执行。无论这个包中有多少个类,您的方法calExecTime都将为所有类调用。但是请确保这不会产生任何内存问题。我已经在答案中更新了同样的内容。也请在这里了解更多关于AOP的信息。