方志朋 2020-05-01
Aspect Oriented Programming,
即:面向切面编程
通过 预编译方式 和 运行期动态代理 来实现程序功能的统一维护的技术
AOP技术是OOP技术(即:面向对象编程)的延续,是当今软件开发的热点
原理:
动态代理
(相关知识点,请观看本人博文 —— 《详解 代理模式》)
好处:
- 对业务逻辑的各个部分进行隔离,从而使业务逻辑各部分间的耦合度降低
- 提高程序的可重用性,同时提高开发的效率
- 提供声明式事务
- 用户可以自定义切面
举个例子:
当我们编写购物网站时候,所运用的是MVC机制(servlet掉service,service掉dao)这种纵向调用模式
但是,假如上司要求在service和dao层的方法中增加日志,
按照我们往常的做法,要给每一个方法的每一个类去修改
但是,运用了AOP技术之后,我们就可以定义切面,
然后通过切面去给所需方法进行增强
如下图所示:
那么,现在本人来介绍一下 AOP中的几个常见名词:
跨越应用程序多个模块的方法或功能
即:与业务逻辑无关,但我们需要关注的部分例如:日志、缓存、事务...
一个类
横切关注点 被模块化 后的对象
切面中的一个方法
非核心业务逻辑
也就是对核心业务逻辑增强的代码分类:
- 前置通知 —— 目标方法前
- 后置通知 —— 目标方法后
- 环绕通知 —— 目标方法前后
- 异常通知 —— 目标方法抛出异常后
- 返回值通知 —— 目标方法返回后(在后置通知之后)
被通知的对象
向目标对象应用通知后,所创建的对象
横向交织的共同逻辑,
也就是定义切入的规则
业务逻辑类 中 可能被代理的方法
可以将核心业务方法和增强方法 关联起来
代理对象中的各种通知,
核心业务+非核心业务
那么,下面本人来通过一张图展示下上述名词的工作步骤:
首先,我们需要导入两个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机制 注解式 详解》