本文概述
- 行动计划
- AOP的好处
- 跨领域关注
- AOP术语
- AOP与OOP
- Spring AOP与AspectJ
- AOP咨询的类型
- Spring Boot Starter AOP
- Web层:它使用REST或Web应用程序公开服务。
- 业务层:它实现了应用程序的业务逻辑。
- 数据层:它实现了应用程序的持久性逻辑。
如果我们分别在每一层中实现这些问题, 则代码将变得更加难以维护。为了克服此问题, 面向方面的编程(AOP)提供了一种解决跨领域问题的解决方案。
- 实施跨领域关注是一个方面。
- 定义切入点以指示必须在哪个方面应用方面。
行动计划 AOP(面向方面??的编程)是一种编程模式, 可通过允许跨领域关注点分离来提高模块化。这些横切关注点与主要业务逻辑不同。我们可以在不修改代码本身的情况下向现有代码添加其他行为。
Spring的AOP框架可帮助我们实现这些跨领域的关注。
使用AOP, 我们可以在一处定义通用功能。我们可以自由定义应用此功能的方式和位置, 而无需修改应用新功能的类。现在, 可以将横切关注点模块化为特殊类, 称为方面。
方面有两个好处:
- 首先, 每个关注点的逻辑现在都集中在一个地方, 而不是分散在整个代码库中。
- 其次, 业务模块仅包含主要关注的代码。次要关注点已移至该方面。
AOP的好处
- 它是用纯Java实现的。
- 不需要特殊的编译过程。
- 它仅支持方法执行连接点。
- 仅运行时编织可用。
- 有两种类型的AOP代理:JDK动态代理和CGLIB代理。
AOP术语
- 方面:方面是一个封装建议和切入点并提供跨切面的模块。应用程序可以具有许多方面。我们可以使用带有@Aspect注释的常规类来实现方面。
- 切入点:切入点是一种表达式, 它选择一个或多个执行建议的连接点。我们可以使用表达式或模式定义切入点。它使用与连接点匹配的不同类型的表达式。在Spring Framework中, 使用AspectJ切入点表达语言。
- 连接点:连接点是应用程序中应用AOP方面的点。或它是建议的特定执行实例。在AOP中, 连接点可以是方法执行, 异常处理, 更改对象变量值等。
- 建议:建议是我们在方法执行之前或之后执行的操作。该动作是在程序执行期间调用的一段代码。 Spring AOP框架中有五种类型的建议:之前, 之后, 返回之后, 抛出后以及周围的建议。针对特定的连接点提供建议。我们将在本节中进一步讨论这些建议。
- 目标对象:在其上应用建议的对象称为目标对象。目标对象始终是代理对象, 这意味着在运行时将创建一个覆盖目标方法的子类, 并根据其配置包含建议。
- 编织:这是将各方面与其他应用程序类型链接的过程。我们可以在运行时, 加载时和编译时执行编织。
AOP与OOP AOP和OOP之间的区别如下:
AOP | OOP |
---|---|
方面:封装切入点, 建议和属性的代码单元。 | 类:封装方法和属性的代码单元。 |
切入点:它定义了在其中执行建议的一组入口点。 | 方法签名:它定义了执行方法主体的入口点。 |
建议:这是跨领域关注点的实现。 | 方法主体:它是业务逻辑关注点的实现。 |
Waver:借助建议构造代码(源或对象)。 | 编译器:它将源代码转换为目标代码。 |
文章图片
Spring AOP与AspectJ AOP和OOP之间的区别如下:
Spring AOP | AspectJ |
---|---|
需要单独的编译过程。 | 它需要AspectJ编译器。 |
它仅支持方法执行切入点。 | 它支持所有切入点。 |
它可以在Spring Container管理的bean上实现。 | 可以在所有域对象上实现它。 |
它仅支持方法级别编织。 | 它可以波动字段, 方法, 构造函数, 静态初始化器, 最终类等。 |
- 咨询前
- 咨询后
- 忠告
- 投掷后
- 回国后
咨询后:在咨询点之后执行的建议在连接点之后执行。我们使用@After注释将建议标记为After建议。
【Spring Boot AOP介绍和用法全解】围绕建议:在连接点之前和之后执行的建议被称为围绕建议。
投掷建议后:当连接点抛出异常时执行的建议。
返回建议后:当方法成功执行时执行的建议。
在应用程序中实现AOP之前, 我们需要在pom.xml文件中添加Spring AOP依赖项。
Spring Boot Starter AOP Spring Boot Starter AOP是提供Spring AOP和AspectJ的依赖项。其中AOP提供基本的AOP功能, 而AspectJ提供完整的AOP框架。
<
dependency>
<
groupId>
org.springframework.boot<
/groupId>
<
artifactId>
spring-boot-starter-aop<
/artifactId>
<
version>
2.2.2.RELEASE<
/version>
<
/dependency>
在下一节中, 我们将在应用程序中实现不同的建议。
推荐阅读
- Spring Boot Starter执行器介绍和用法
- Spring Boot注解介绍和用法详解
- 验证与验证测试有什么区别()
- Opencv-Android安装使用
- Android-Binder
- call,apply,bind
- spring 通用mapper的一些注解
- 安卓活动的启动模式
- Android tabLayout+recyclerView实现锚点定位