引入依赖包
<dependency>
|
AOP注解说明
@Aspect //表示一个切面 @Component //注册为一个组件 public class AopTest {
@Pointcut("execution( public * org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor.execute(..))") //定义切面切入点,这里表示ThreadPoolTaskExecutor类的execute方法作为切入点 public void pointCut(){//这里名字随便取,但是其他地方需要保持一致, 如@Before("pointCut()"),@After("pointCut()")等 }
@Before("pointCut()")//切入点之前执行 public void testBefore(JoinPoint joinPoint) {//参数可以为空,不为空可以是JoinPoint System.out.println("pointCut():testBefore"); }
@After("pointCut()")//切入点之后执行 public void testAfter() { System.out.println("pointCut():testAfter"); }
@AfterReturning("pointCut()")//切入点返回执行 public void testAfterReturning() { System.out.println("pointCut():testAfterReturning"); }
@AfterThrowing("pointCut()")//切入点抛异常执行 public void testAfterThrowing() { System.out.println("pointCut():testAfterThrowing"); }
@Around("pointCut()")//环绕切入点,注意这里参数是ProceedingJoinPoint public void deAround(ProceedingJoinPoint joinPoint) throws Throwable{ // 获取目标方法的名称 String methodName = joinPoint.getSignature().getName(); System.out.println("methodName = " + methodName); Object[] args = joinPoint.getArgs(); for (Object arg : args) { System.out.println(arg); } joinPoint.proceed();//执行实际切入点方法 } } |
注意:
如果运行后没有执行切面内容,检查@ComponentScan(basePackages = {"com.fullsee.aop","com.fullsee.factory", "com.fullsee.start", "com.fullsee.start.runner"})中是否包含Aop切面配置所在目录,如果没有需要加上。满足以上条件之后,只要执行切入点所在方法就会自动执行切面中的方法。
切面直接作用于Thread或Runnabe的run方法,可以用如下配置
@Pointcut("execution( public * java.util.concurrent.Executor.*(..)))")
示例
package com.fullsee.aop;
|
@EnableAsync
|