【Spring框架学习】AOP机制 详解

基本概念:

Aspect Oriented Programming,
即:面向切面编程
通过 预编译方式运行期动态代理 来实现程序功能的统一维护的技术
AOP技术是OOP技术(即:面向对象编程)的延续,是当今软件开发的热点


原理:

原理

动态代理

(相关知识点,请观看本人博文 —— 《详解 代理模式》)


有什么好处?

好处

  1. 对业务逻辑的各个部分进行隔离,从而使业务逻辑各部分间的耦合度降低
  2. 提高程序的可重用性,同时提高开发的效率
  3. 提供声明式事务
  4. 用户可以自定义切面

举个例子:
当我们编写购物网站时候,所运用的是MVC机制(servlet掉service,service掉dao)这种纵向调用模式
但是,假如上司要求在service和dao层的方法中增加日志,
按照我们往常的做法,要给每一个方法的每一个类去修改
但是,运用了AOP技术之后,我们就可以定义切面,
然后通过切面去给所需方法进行增强
如下图所示:
【Spring框架学习】AOP机制 详解


那么,现在本人来介绍一下 AOP中的几个常见名词:

名词解析:

1. 横切关注点

跨越应用程序多个模块的方法或功能
即:与业务逻辑无关,但我们需要关注的部分


例如:日志、缓存、事务...


2. 切面(Aspect):

一个
横切关注点 被模块化 后的对象


3. 通知(Advice)

切面中的一个方法
非核心业务逻辑
也就是对核心业务逻辑增强的代码


分类

  1. 前置通知 —— 目标方法前
  2. 后置通知 —— 目标方法后
  3. 环绕通知 —— 目标方法前后
  4. 异常通知 —— 目标方法抛出异常后
  5. 返回值通知 —— 目标方法返回后(在后置通知之后)

4. 目标对象(Target):

被通知的对象


5. 代理对象(Proxy):

向目标对象应用通知后,所创建的对象


6. 切入点(PointCut):

横向交织的共同逻辑
也就是定义切入的规则


7. 连接点(JoinPoint):

业务逻辑类可能被代理的方法
可以将核心业务方法增强方法 关联起来


8. 织入(Weaving):

代理对象中的各种通知
核心业务+非核心业务

那么,下面本人来通过一张图展示下上述名词的工作步骤
【Spring框架学习】AOP机制 详解


Maven导入:

首先,我们需要导入两个Jar包:

<!-- spring框架所有Jar包导入 -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.5.RELEASE</version>
</dependency>

<!-- aspectj Jar包导入 -->
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>

同样地,spring框架对于AOP机制,也提供了两套使用方式 —— 配置文件式注解式

首先,本人来介绍一下 配置文件式 的语法:

配置文件式 语法:

请观看本人博文 —— 《【Spring框架学习】AOP机制 配置文件式 详解》


那么,接下来,本人再来讲解下 注解式 的语法:

注解式 语法:

请观看本人博文 —— 《【Spring框架学习】AOP机制 注解式 详解》


相关推荐