目录

AOP

AOP简介

  • 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,
  • 通过预编译方式和运行期动态代理,实现程序功能的统一维护的一种技术。
  • AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。
  • 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

开发存在 的问题

三大框架 之 Spring-Aop 随笔 第1张

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

三大框架 之 Spring-Aop 随笔 第2张

JDK动态代理

三大框架 之 Spring-Aop 随笔 第3张

cglib动态代理

  • Cglig是一个第三方开源代码
  • 生成类库,动态添加类的属性和方法。
  • 在spring的核心包当中已经引入了cglib
    三大框架 之 Spring-Aop 随笔 第4张

  • 采用的是继承方式来产生的代理对象

三大框架 之 Spring-Aop 随笔 第5张

Spring的AOP简介

  • AOP思想最早是由AOP联盟组织提出的
  • Spring使用这种思想最好的框架
  • AspectJ
Spring的AOP有自己的实现方式,但是这种方式非常繁琐
AspectJ是一个AOP的框架
Spring放弃了自己传统的方式 ,引入AspectJ作为自身AOP的开发

AOP相关术语

Joinpoint:连接点

  • 可以被拦截到的方法

  • 能够被增强的方法,这些方法就可以称为是连接点

三大框架 之 Spring-Aop 随笔 第6张

Pointcut:切入点

  • 真正被拦截的方法
  • 真正被增加的方法
    三大框架 之 Spring-Aop 随笔 第7张

Advice:通知

​ 增加的内容,通常都是封装成一个方法, 这个方法我们就称为通知
三大框架 之 Spring-Aop 随笔 第8张

Introduction:引介

  • 类层面的增加
  • 给原有的类添加一些新的属性方法
  • 在开发中通常都是给方法进行增加

Target:被增加的对象

三大框架 之 Spring-Aop 随笔 第9张

Weaving:织入

​ 将通知应用到目标对象的过程

Proxy:代理对象

Aspect:切面

​ 多个通知和多个切入点的集合

Spring中AOP使用

1.引入spring基本jar包
2.引入aop开发的相关jar包
三大框架 之 Spring-Aop 随笔 第10张

3.配置文件中引入aop约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd">
</beans>

4.Spring测试

  • 测试时,每次都需要获取工厂
  • 通过spring-test,就不用每次获取
  • 添加测试依赖包

三大框架 之 Spring-Aop 随笔 第11张

5.测试
三大框架 之 Spring-Aop 随笔 第12张

三大框架 之 Spring-Aop 随笔 第13张

6.编写一个切面类
三大框架 之 Spring-Aop 随笔 第14张

7.将切面交给spring
三大框架 之 Spring-Aop 随笔 第15张

8.配置AOP完成对目标产生代理
三大框架 之 Spring-Aop 随笔 第16张

AOP通知类型

前置通知

​ 在目标方法执行之前进行操作

后置通知

​ 在目标方法执行之后 进行操作
三大框架 之 Spring-Aop 随笔 第17张

三大框架 之 Spring-Aop 随笔 第18张

环绕通知

​ 在目标方法执行之前 和之后进行操作

    public Object arount()

三大框架 之 Spring-Aop 随笔 第19张

三大框架 之 Spring-Aop 随笔 第20张

异常抛出通知

​ 在程序出现异常时进行操作
三大框架 之 Spring-Aop 随笔 第21张

三大框架 之 Spring-Aop 随笔 第22张

最终通知

​ 无论代码是否有异常,都会执行
三大框架 之 Spring-Aop 随笔 第23张

AOP切入点表达式

基于execution函数完成

语法

【访问修饰符】 方法返回值 包名.类名.方法名(参数)
public com.myxq.demo2.GoodsDaoImpl.save(..)  
    参数为任意参数
* com.myxq.demo2.GoodsDaoImpl.save(..)  
    任意类型
* com.myxq.demo2.GoodsDaoImpl+.save(..)  
    加上当前类和子类
* com.myxq..*.*(..)
    com.myxq包以及子包下面所有类的所有方法

三大框架 之 Spring-Aop 随笔 第24张

AOP注解方式ApsectJ开发

引入Jar包

三大框架 之 Spring-Aop 随笔 第25张

引入配置文件

三大框架 之 Spring-Aop 随笔 第26张

编写切面类配置

三大框架 之 Spring-Aop 随笔 第27张

三大框架 之 Spring-Aop 随笔 第28张

使用注解的AOP对象目标类进行增强

在配置文件中开启以注解形式进行AOP开发

三大框架 之 Spring-Aop 随笔 第29张

在切面类上添加注解

三大框架 之 Spring-Aop 随笔 第30张

注解AOP通知类型

@Before前置通知

@AfterReturning后置通知

没有返回值

三大框架 之 Spring-Aop 随笔 第31张

有返回值

三大框架 之 Spring-Aop 随笔 第32张

@Around环绕通知

三大框架 之 Spring-Aop 随笔 第33张

@AfterThrowing异常抛出通知

没有获取异常信息

三大框架 之 Spring-Aop 随笔 第34张

获取异常信息

三大框架 之 Spring-Aop 随笔 第35张

@After最终通知

三大框架 之 Spring-Aop 随笔 第36张

AOP的注解切入点的配置

  • 有时候一个方法要添加前置通知对又要添加异常通知,又要添加最终通知
  • 可以在切面当中定义好切入点
  • 在通知当中直接使用定义好的切入点表达式

三大框架 之 Spring-Aop 随笔 第37张

定义多个切入点

​ 一个通知同时定义到多个方法当中

三大框架 之 Spring-Aop 随笔 第38张

当使用接口时与不使用接口内部代理区别

使用接口

三大框架 之 Spring-Aop 随笔 第39张

不使用接口

三大框架 之 Spring-Aop 随笔 第40张

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄