Spring AOP

Spring AOP

AOP, Aspect Oriented Programming, 面向切面编程。它是OOP的一种有效补充。

AOP与OOP一样,是一种编程的理念,而 AspectJ组件是实现了AOP理念的,SpringAOP整合了aspectJ组件,所以,SpringAOP 可以帮助我们改进代码,它能够在不改变原有业务逻辑的基础上,动态地给目标代码添加“新的功能",而这些功能就是“切面”, 这种编程的思考模式就是 面向切面编程。

一般是“共性”的辅助性功能,做成“切面”,如:日志, 安全,认证,授权,事务等等。

Spring AOP的核心概念

  1. Aspect, 切面,它是AOP的核心概念,不是业务逻辑,而是共性,它相当于 Advice + Pointcut

  2. Advice, 通知,它是指切面要添加的共性功能的代码载体,是程序员要表达述求的类型,比如: 要添加日志功能,则我们需要开发一个 LogAdvice 类,要添加事务功能,则我们要开发 TransactionAdvice类,等....

  3. PointCut, 切入点,它是指Advice要被织入到目标对象的匹配规则【match pattern】,它有多个连接点[JointPoint]组成,如下:

    • before, 在目标方法执行之前

    • after, 目标方法执行之后,是在目标方法已经返回

    • afterThrowing, 目标方法出现异常时,在catch块执行

    • afterReturning, 目标方法中的finally块执行【不一定要出现异常】

    • around, 以上4个综合体

  4. JoinPoint, 连接点,也就是PointCut匹配到目标对象的方法后,在方法的哪个执行时间切入的连接点。

  5. Weave,织入的动作,是一个动词,指的是Spring AOP 是如何把切面“织入”到目标对象,本质是基于代理来实现的,SpringAOP支持两种代理模式:

    • 基于JDK自带的动态代理机制,也就是java.lang.reflect.Proxyjava.lang.reflect.InvocationHandler ,这种机制有一个前提,就是目标对象一定要有实现的接口。

    • 基于第三方提供的代理库叫 cglib,它是基于字节码增加的一个代理库,它的功能丰常强大,任何的对象的都可以通过它来产生代理。

SpringAOP的使用

  1. 开发 Advice 类型, 当做一个Bean来管理,所以需要打上 @Component 注解

  2. 指定匹配规则,语法有多种

  3. 要开启AOP

AOP相关的注解

  1. @EnableAspectJAutoProxy //开启AOP的动态代理

  2. @Aspect 表示此类是一个切面,要配合 @Component 使用

  3. @Order 表示多个切面的优先顺序,数据越小,优先级越高

  4. @Pointcut 用来制定匹配的规则,它的语法:

    execution(修饰符 * 包名.类名|*.*|方法名.(..|*,*))
  5. @Before 连接点,它要引用 @Pointcut 或者直接写 匹配规则

  6. @After 连接点,它要引用 @Pointcut 或者直接写 匹配规则

  7. @AfterThrowing, 连接点,它要引用 @Pointcut 或者直接写 匹配规则

  8. @AfterReturning 连接点,它要引用 @Pointcut 或者直接写 匹配规则

  9. @Around, 连接点,它要引用 @Pointcut 或者直接写 匹配规则

 

原文地址:https://www.cnblogs.com/fanzhuangzhuang/p/11236695.html