spring aop中@Around @Before @After三个注解的区别
@Before是在所拦截方法执行之前执行一段逻辑。
@After 是在所拦截方法执行之后执行一段逻辑。
@Around是可以同时在所拦截方法的前后执行一段逻辑
@Aspect
@Component
public class AroundTest {
@Pointcut("execution(* pers.spt.sptest.bead.BeanTest.testSout(..))")
public void test(){}
@After("test()")
private void after() {
System.out.println(" after");
}
@Before("test()")
private void before() {
System.out.println(" before");
}
@Around("test()")
public void around(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("Around 方法执行前");
pjp.proceed();
System.out.println("Around 方法执行后");
}
}
Around 方法执行前
before
业务
after
Around 方法执行后
业务代码跑出异常处理
Around 方法执行前
before
业务
after
java.lang.Exception:
at pers.spt.sptest.bead.BeanTest.testSout(BeanTest.java:16)