首页 > 其他分享 >Spring AOP

Spring AOP

时间:2023-10-06 18:56:08浏览次数:46  
标签:Spring 代理 切点 切面 AOP 注解

引言

要掌握 Spring AOP 框架,需要弄明白 AOP 的概念。

AOP 概念

AOP(Aspect Oriented Programming的缩写,翻译为面向方面或面向切面编程),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用 AOP 可以对业务逻辑的各个部分隔离,从而使的业务逻辑各部分的耦合性降低,提高程序的可重用性,踢开开发效率,使用 AOP 技术可以实现的主要功能有日志记录,性能统计,安全控制,事务处理,异常处理等。

AOP 技术的底层实现原理是 JDK 动态代理和 CGLIB 动态代理。这两种动态代理的区别是 JDK 动态代理必须实现接口,而 CGLIB 直接操纵字节码,可以做到不使用接口的情况下实现动态代理。

AOP 与 OOP 区别

OOP面向对象编程,针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。而 AOP 则是针对业务处理过程中的切面进行提取,它所面对的是处理过程的某个步骤或阶段,以获得逻辑过程的中各部分之间低耦合的隔离效果。这两种设计思想在目标上有着本质的差异。

AOP 术语

  • 连接点(Joinpoint)
    AOP 插入代码的特定位置(方法调用前、方法调用后、方法调用前后、抛出异常)

  • 切点(Pointcut)
    AOP 定位或查找连接点的方式(一个切点可以匹配多个连接点)

  • 增强(Advice)
    AOP 插入到连接点的一段程序代码(前置增强、后置增强、环绕增强和抛出异常增加)

  • 引介(Introduction)
    特殊的增强(可以为类添加一些属性和方法)

  • 织入(Weaving)
    插入代码的过程(AOP 有三种织入方式:编译器织入、类装载期织入、动态代理织入)

  • 切面(Aspect)
    由切点和增强或引介组成(Spring AOP 是负责实施切面的框架)

Spring AOP 框架

Spring AOP 是使用纯 Java 实现 AOP,它不需要专门的编译过程,也不需要特殊的类装载器,它在运行期通过代理的方式向目标类织入增强代码。Spring AOP 使用了两种代理机制:JDK 动态代理和CGLib 动态代理,它们是 Spring AOP 底层技术。

Spring AOP 支持两种使用方式:

  • 基于 XML 配置文件

  • 基于注解

注解

复制代码
<!– 开启 AOP 注解开关 -->
<aop:aspectj-autoproxy  />
  • @Aspect 注解:放置于切面类上,用于注解定义一个切面

  • @Before 注解:放置于切面类方法上,用于注解实现前置增强

  • @After 注解:放置于切面类方法上,用于注解实现后置增强

  • @Around 注解:放置于切面类方法上,用于注解实现环绕增强

  • @AfterThrowing 注解:放置于切面类方法上,用于注解实现抛出异常增强

切点表达式

**切点表达式 = execution(返回值类型 + 包名 + 类名 + 方法名 + 参数个数) **
切点表达式支持三个通配符:

  • 符号(*) :代表任意字符,匹配上下文中的一个元素

  • 符号(..):代表任意字符,可以代表多个元素,但是在表示类的时候不能单独使用,必须和 * 配合;在代表形参的时候可以单独使用

  • 符号(+):代表按类型匹配指定类的所有类(包括子类),只能跟在类名的后面

举例:
execution(* com.dt..Dog.b(..))

该切点表达式表示匹配 1)方法的任意类型返回值,2)方法必须是 com.dt 所在包 3)类名必须为Dog 4)方法名必须以字母 b 开头 5)方法参数个数不限

总结

AOP 可以通过预编译方式和运行期动态代理实现在不修改源码的情况下,给程序动态统一添加功能的一项技术。

 

标签:Spring,代理,切点,切面,AOP,注解
From: https://www.cnblogs.com/mystarry/p/17744834.html

相关文章

  • Spring IoC
    引言要明白SpringIoC容器的作用,就必须先弄明白IoC(控制反转)和DI(依赖注入)这两个概念。IoC概念IoC(控制反转)就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责,这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。控制权转移带来的......
  • SpringBoot整合mybatisplus总结
      最近学习了一些springboot的知识后,开始了对于mybatis的学习,在运用这个框架方面,我选择跟随网上的资料进行整合,遇到了一些问题,并通过自己的查阅资料以及探索,解决了问题。下面概括一下mybatisplus框架的作用,以及应用,并对我学习时遇到的一些问题进行说明。  MyBatis-Plus(简......
  • 4. spring完全注解开发,独立配置,不使用xml
    user类: 转换结果: 注入参数还是上一篇所说的方法  支持最低版本spring4.1运行方法要有所改变:原来的://获取配置文件ApplicationContextcontext=newClassPathXmlApplicationContext("application.xml");//配置文件自动扫描z......
  • springboot中的代码生成器
    springboot可以集成MyBatis-Plus代码生成器,如何想要快速开发或者考试可以试用一下。我参看下面这篇博客弄的:Mybatis-Plus自动生成代码,自定义Controller_mybatisplus生成controller-CSDN博客有些好用 ......
  • SpringBoot
    1什么是springboot?用来简化spring应用的初始搭建以及开发过程使用特定的方式来进行配置(properties或yml文件)创建独立的spring引用程序main方法运行嵌入的Tomcat无需部署war文件简化maven配置自动配置spring添加对应功能starter自动化配置springboot来简化spring应用开......
  • Spring Boot请求响应:实战指南
    今天主要围绕着:请求、响应进行,主要包含两部分:请求响应1.请求我们主要讲解,如何接收页面传递过来的请求数据。1.1Postman之前我们课程中有提到当前最为主流的开发模式:前后端分离网站工作流程介绍在这种模式下,前端技术人员基于"接口文档",开发前端程序;后端技术人员也基于"接口文档",......
  • Spring Boot请求响应:实战指南
    今天主要围绕着:请求、响应进行,主要包含两部分:请求响应1.请求我们主要讲解,如何接收页面传递过来的请求数据。1.1Postman之前我们课程中有提到当前最为主流的开发模式:前后端分离网站工作流程介绍在这种模式下,前端技术人员基于"接口文档",开发前端程序;后端技术人员也基于"接口文档",......
  • 3. SpringMVC-使用注解开发-beans
    万能开头:<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:c="http://www.spring......
  • SpringMVC 数据校验
    SpringMVC数据校验应用程序在执行业务逻辑前,必须通过数据校验保证接收的输入数据时正确合法的.在一般情况下,应用程序的开发是分层的,不同层的代码由不同开发人员负责。很多时候,同样的数据校验会出现在不同层中,这样会导致代码冗余,为了避免这样的情况,最好是将验证逻辑和相应的域......
  • SpringMVC 拦截器
    SpringMVC拦截器<!--配置拦截器,可定义多个拦截器--><mvc:interceptors><!--定义1个拦截器--><mvc:interceptor><!--用于指定拦截器匹配url--><mvc:mappingpath="/user/**"/><!--用于指定拦截器排除的url-->&......