欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring中AOP操作的注解实现方式

程序员文章站 2024-01-11 15:37:16
用注解实现AOP操作1、Spring 框架一般都是基于 AspectJ 实现 AOP 操作 (1)AspectJ 不是 Spring 组成部分,独立 AOP 框架,一般把 AspectJ 和 Spirng 框架一起使 用,进行 AOP 操作首先需要引入相关依赖 这里就不赘述切入点表达式(1)切入点表达式作用:知道对哪个类里面的哪个方法进行增强 (2)语法结构: execution([权限修饰符] [返回类型] [类全路径] [方法名称](参数列表))ps:星号即表示所有的意思举例1:对com...

用注解实现AOP操作

1、Spring 框架一般都是基于 AspectJ 实现 AOP 操作 (1)AspectJ 不是 Spring 组成部分,独立 AOP 框架,一般把 AspectJ 和 Spirng 框架一起使 用,进行 AOP 操作

首先需要引入相关依赖 这里就不赘述

Spring中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();
}

Spring中AOP操作的注解实现方式

下面列出通知的几种方法

@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

相关标签: Spring