AOP快速入门

简介: AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构\作用:在不惊动原始设计的基础上为其进行功能增强Spring理念:无入侵式

AOP简介

AOP介绍

  • AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构\
  • 作用:在不惊动原始设计的基础上为其进行功能增强
  • Spring理念:无入侵式
  • 连接店(joinPoint):程序执行过程中共的任意位置,粒度位执行方法,抛出异常,设置变量等
  • 在SpringAOP中,理解位方法的执行
  • 切入点(pointcut):匹配连接点的式子
  • 在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法
  • 一个具体的方法:com.wangxh.bao下的BookDao接口中无形参无返回值的save方法
  • 匹配多个方法:所有的save方法,所有的get开头的方法,所有以dao结尾的接口中的任意方法,所有带有一个参数的方法
  • 通知(advice):在切入点执行的操作,也就是共性功能**
  • 通知类:定义通知的类
  • 切面(Aspect):描述通知与切入点的对应关系

AOP入门案例(注解版)

  1. 定义dao接口与实现类

publicinterfaceBookDao {

   publicvoidsave();

   publicvoidupdate();

}

  1. 实现类

@Repository

publicclassBookDaoImplimplementsBookDao {

   publicvoidsave(){

       System.out.printlnn(System.currentTimeMillis());

       System.out.println("book dao save...");

   }

   

   publicvoidupdate(){

       System.out.printlb("book dao update...");

   }

}

  1. 通知类

publicclassMyAdvice {

   publicvoidbefore(){

       System.out.println(System.currentTimeMillis());

   }

}

  1. 定义切入点

publicclassMyAdvice {

   @Pointcut("execution(void com.wangxh.dao.BookDao.update())")

   privatevoidpt(){}

}

说明:切入点定义依托一个不具有实际意义的方法进行,即无参数,无返回值,方法体实际逻辑

  1. 绑定切入点与通知关系,并指定通知添加到原始连接点的具体执行位置

publicclassMyAdvice{

   @Pointcut("execution(void com.wangxh.dao.BookDao.update())")

   privatevoidpt(){}

   

   @Before("pt()")

   publicvoidbefore(){

       System.out.println(System.currentTimeMillis());

   }

}

  1. 定义通知类受Spring容器管理,并定义当前类为切面类

@Component

@Aspect

publicclassMyAdvice {

   @Pointct("execution(void com.wangxh.dao.BookDao.update())")

   privatevoidpt(){}

   @Before("pt()")

   publicvoidbefore()

   System.out.println(System.currentTimeMillis());

}

  1. 开启Spring对AOP注解驱动支持

@Configuration

@ComponentScan("com.wangxh")

@EnableAspectJAutoProxy

publicclassSpringConfig{

   

}

AOP切入点表达式

  • 切入点:要进行增强的方法
  • 切入点表达式:要进行增强的方法的描述方式
  • 描述方法一:执行com.wangxh.dao包下的BookDao接口中的无参数update方法
    execution(void com.wangxh.dao.BookDao.update())
  • 描述方法二:执行com.wangxh.dao.impl包下的BookDaoImpl类中的无参数update方法
  • excecution(void com.wangxh.dao.impl.BookDaoImpl.update())

语法格式

通配符

书写技巧

AOP通知类型

  • AOP通知描述了抽取的共性功能,根据共性功能抽取的位置的不同,最终运行代码时要将其加入到合理的位置
  • AOP通知共分为5中类型
  • 前置通知
  • 后置通知
  • 环绕通知(重点)
  • 注意事项
  • 返回后通知(了解)
  • 抛出异常后通知(了解)


相关文章
|
6月前
|
Java Spring 容器
基于注解的Aop开发,实现aop快速入门,基于注解的AOP开发
基于注解的Aop开发,实现aop快速入门,基于注解的AOP开发
java202304java学习笔记第六十四天-ssm-aop快速入门3
java202304java学习笔记第六十四天-ssm-aop快速入门3
42 0
|
Java 程序员 数据安全/隐私保护
Spring AOP -- Spring快速入门保姆级教程(三)(2)
Spring AOP -- Spring快速入门保姆级教程(三)
101 0
|
Java Spring 容器
Spring AOP -- Spring快速入门保姆级教程(三)(1)
Spring AOP -- Spring快速入门保姆级教程(三)
java202304java学习笔记第六十四天-ssm-aop快速入门2
java202304java学习笔记第六十四天-ssm-aop快速入门2
57 0
java202304java学习笔记第六十四天-ssm-aop快速入门2
java202304java学习笔记第六十四天-ssm-aop快速入门2
34 0
java202304java学习笔记第六十四天-ssm-aop快速入门1
java202304java学习笔记第六十四天-ssm-aop快速入门1
62 0
java202304java学习笔记第六十四天-ssm-aop快速入门1
java202304java学习笔记第六十四天-ssm-aop快速入门1
68 0
java202304java学习笔记第六十四天-ssm-aop快速入门4
java202304java学习笔记第六十四天-ssm-aop快速入门4
73 0
|
XML 设计模式 Java
Spring--快速入门AOP
Spring--快速入门AOP
153 0