Spring中AOP操作的注解实现方式
用注解实现AOP操作
1、Spring 框架一般都是基于 AspectJ 实现 AOP 操作 (1)AspectJ 不是 Spring 组成部分,独立 AOP 框架,一般把 AspectJ 和 Spirng 框架一起使 用,进行 AOP 操作
首先需要引入相关依赖 这里就不赘述
切入点表达式
(1)切入点表达式作用:知道对哪个类里面的哪个方法进行增强 (2)语法结构: execution([权限修饰符] [返回类型] [类全路径] [方法名称](参数列表))
ps:星号即表示所有的意思
举例1:对com.spring.dao.bookdao类的add方法进行增强
execution(* com.spring.dao.bookdao.add(…)) 其中(…)表示add方法的参数列表 注意:第一个*后面有空格,星号表示所有的修饰符(public private等等)返回类型可以省略不写
举例2:对com.spring.dao.bookdao类的所有方法增强
execution(* com.spring.dao.bookdao.*(…))
举例3:对com.spring.dao包中的所有类的所有方法增强
execution(* com.spring.dao.* .*(…))
实例代码
类
@Component
public class BookDao {
public void add(){
System.out.println("bookdao Add something...");
}
}
增强类
@Component
@Aspect
public class BookDaoProxy {
//前置通知
@Before(value = "execution(* com.spring.dao.BookDao.add(..))")//在BookDao的add方法之前执行
public void before(){
System.out.println("在方法执行之前......");
}
}
测试类
@Test
public void test1(){
ApplicationContext context
=new ClassPathXmlApplicationContext("bean1.xml");
BookDao bookDao = context.getBean("bookDao", BookDao.class);
System.out.println(bookDao);
bookDao.add();
}
下面列出通知的几种方法
@Before 前置通知
@AfterReturning 后置通知 如果发生异常,此方法不会执行
@After 最终通知 即不管发生异常否都会执行
@AfterThrowing 异常通知 发生异常才会执行
@Around 环绕通知 执行前执行后都会执行一遍
很简单 具体可以自行测试,这里不再赘述
切入点抽取
例子
@Pointcut(value = “execution(* com.spring.dao.BookDao.add(…))”)
public void pointdemo() {
方法体中写增强逻辑
}
有切入点后此时可以写成如下
//前置通知
@Before(value = "pointdemo()")//在BookDao的add方法之前执行
public void before(){
System.out.println("在方法执行之前......");
}
这样同一个切入点和增强逻辑就可以复用,提高代码效率
设置增强优先级
@Order(数字) 数字越小优先级越高
例子
@Component
@Aspect
@Order(1)
public class PersonProxy{}
本文地址:https://blog.csdn.net/luerdao_/article/details/110286385