我有以下程序。周围的方法被调用,但为什么不是主要方法?据我所知,方法是在方法执行之前或之后执行的。这里围绕方法被调用,但为什么它不打印主要方法,即getEmploy();.
@Configuration
public class App extends Thread{
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.inno.aop");
context.refresh();
EmployManager emp = (EmployManager) context.getBean("employManager");
emp.getEmploy();
context.close();
}
}
@Service
public class EmployManager {
public void getEmploy() {
System.out.println("Here is your employ" );
}
public void getEmp() {
System.out.println("Here is your emp" );
}
}
@Aspect
@Component
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class EmployAspect {
@Around("execution(* com.inno.aop.EmployManager.*(..))")
public void logAround(JoinPoint joinPoint) {
System.out.println("Around method getting called");
}
}
Output:
Around method getting called
最佳答案
从documentation
围绕建议:围绕连接点的建议,例如方法
调用。这是最有力的建议。围绕建议
可以在方法调用之前和之后执行自定义行为。它
还负责选择是否继续进行连接点
或通过返回自己建议的方法来捷径建议的方法执行
返回值或引发异常。
我们需要在@Around建议中使用ProceedingJoinPoint
org.aspectj.lang.ProceedingJoinPoint
通过使用@Around批注来声明周围建议。首先
建议方法的参数必须为ProceedingJoinPoint类型。
在建议的正文中,在
ProceedingJoinPoint使基础方法执行。的
前进方法也可以传入Object []。数组中的值
用作方法执行时的参数。
该代码应为
@Around("execution(* com.inno.aop.EmployManager.*(..))")
public void logAround(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("Around method getting called");
joinPoint.proceed();
}
关于java - Spring 标注,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60069978/