10、AOP注解方式的实现
注解方式实现AOP
1.导入依赖包
<!-- spring切面包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.3.5</version>
</dependency>
<!--aop联盟包-->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
2.通过@Aspect注解声明切面
@Aspect
@Component
//如果有多个增强类对同一方法进行增强,可以通过此注解设置优先级
//数字越小,代理位置越靠近注入位置,优先级越高
@Order(1)
public class DaoAspect {
//定义一个公共切点,可以指向方法或者接口
@Pointcut("execution(* com.mdh.mvc.dao.UserDao.add(..))")
public void addPointCut(){}
@Before("addPointCut()")
public void methodBefore(JoinPoint joinPoint){
//可以获取方法执行的参数
Object[] args = joinPoint.getArgs();
System.out.println(Arrays.toString(args));
}
@After("addPointCut()")
public void methodAfter(JoinPoint joinPoint){
}
@AfterReturning(value = "addPointCut()",returning = "res")
public void methodAfterReturning(JoinPoint joinPoint,Object res){
//可以接收方法的返回值
System.out.println(res);
}
@AfterThrowing(value = "addPointCut()",throwing = "e")
public void methodAfterThrowing(Exception e){
//可以获取异常信息
System.out.println(e.getMessage());
}
@Around("addPointCut()")
public Object methodAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
//切点方法在这里执行
Object res = proceedingJoinPoint.proceed();
return res;
}
}
JoinPoint对象
JoinPoint对象封装了SpringAOP中切面方法的信息
ProceedingJoinPoint对象
是对象JoinPoint的子接口,只用于@Around的切面方法中,添加了两个方法 Object proceed();执行目标方法 Object proceed(Object[] varl);传入的新的参数去执行目标方法
通过配置类
//声明是一个配置类
@Configuration
//要扫描的包
@ComponentScan("com.mdh")
//是否自动生成切面代理对象
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class SpringConfig{
}
评论( 0 )