HoRain云--SpringBoot AOP

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

该应用程序通常是多层开发的。典型的Java应用程序具有以下几层:
Web层: 它使用REST或Web应用程序公开服务。业务层: 它实现了应用程序的业务逻辑。数据层: 它实现了应用程序的持久性逻辑。
每层的职责不同,但是有一些适用于所有层的常见方面是 日志记录,安全性,验证,缓存等。这些常见方面被称为 跨领域关注点。
如果我们分别在每一层中实现这些关注点,则代码将变得更加难以维护。为了克服这个问题, 面向方面的编程(AOP)提供了一种解决跨领域问题的解决方案。
将跨领域关注作为一个方面。定义切入点以指示必须在何处应用方面。
它确保跨领域关注点在一个内聚的代码组件中定义。
AOP
AOP (Aspect-Oriented Programming)是一种通过允许 跨领域关注点分离来提高模块化的编程模式。这些跨部门关注点与主要业务逻辑不同。我们可以在不修改代码本身的情况下向现有代码添加其他行为。
Spring的AOP框架可帮助我们实现这些跨领域的关注。
使用AOP,我们在一个地方。我们可以自由定义应用此功能的方式和位置,而无需修改应用新功能的类。现在,可以将横切关注点模块化为特殊类,称为 方面。
方面有 两个的优点:
首先,每个关注点的逻辑现在都集中在一个地方,而不是分散在整个代码库中。其次,业务模块仅包含主要关注的代码。次要关注点已移至方面。
各个方面都有要执行的职责,称为 Advice。我们可以在一个或多个连接点将方面的功能实现到程序中。
AOP的优点
它是用纯Java实现的。不需要特殊的编译过程。它仅支持方法执行连接点。仅提供运行时编织。有两种类型的AOP代理: JDK动态代理和 CGLIB代理。
跨领域关注点
跨领域关注点是我们要在应用程序中的多个位置实现的关注点。它会影响整个应用程序。
AOP术语
Aspect: 方面是一个模块,其中封装了advice和pointcuts,并提供cross-cutting可以有许多方面。我们可以使用带有 @Aspect 批注的常规类来实现方面。Pointcut: 切入点是一种表达式,它选择一个或多个执行Advice的连接点。我们可以使用expressions或patterns定义切入点。它使用与联接点匹配的不同类型的表达式。在Spring Framework中,使用 AspectJ 切入点表达语言。Join point: 连接点是应用程序中应用 AOP方面的点。或者它是Advice的特定执行实例。在AOP中,连接点可以是方法执行,异常处理,更改对象变量值等。Advice: Advice是我们在方法执行之前before或after采取的措施。该动作是在程序执行期间调用的一段代码。SpringAOP框架中有五种类型的Advice: 在Advicebefore, after, after-returning, after-throwing和around advice。 是针对特定join point的Advice。 我们将在本节中进一步讨论这些Advice。Target object: 一个应用了Advice的对象称为target object。目标对象始终是proxied,这意味着在运行时将创建一个覆盖目标方法的子类,并根据其配置包含Advice。Weaving: 这是将各个方面与其他应用程序类型进行linking aspects的过程。我们可以在运行时,加载时间和编译时进行织造。
Proxy: 它是在将Advice应用于目标对象后创建的对象,称为 proxy 。 Spring AOP实现了 JDK动态代理,以使用目标类和Advice调用创建代理类。这些称为AOP代理类。
AOP与OOP
AOP与OOP之间的区别如下:
| AOP | OOP |
| Aspect: 一个封装切入点,Advice和属性的代码单元。 | Class: 一个封装方法和属性的代码单元。 |
| Pointcut: 它定义了执行Advice的一组入口点。 | Method signature: 。它定义了执行方法主体的入口点。 |
| Advice: 这是跨领域关注点的实现。 | Method bodies: 是业务逻辑问题的实现。 |
| Waver: 借助Advice构造代码(源或对象)。 | Compiler: 它将源代码转换为目标代码。 |

Spring AOP与AspectJ
AOP和OOP之间的区别如下:
| Spring AOP | AspectJ |
| 需要单独的编译过程。 | 它需要AspectJ编译器。 |
| 它仅支持方法执行切入点。 | 它支持所有切入点。 |
| 它可以在Spring Container管理的bean上实现。 | 它可以在所有域对象上实现。 |
| 它仅支持方法级编织。 | 它可以波动字段,方法,构造函数,静态初始化器,最终类等。 |
AOP Advice的类型
AOP Advice有五种类型,如下所示:
Before AdviceAfter AdviceAround AdviceAfter ThrowingAfter Returning
Before Advice: 在连接点之前执行的Advice在通知之前被调用。我们使用 @Before 批注将Advice标记为Before通知。
After Advice: 在连接点之后执行的Advice被称为after notification。我们使用 @After 注解将Advice标记为After通知。
Around Advice: 在连接点之前和之后执行的Advice是
After Throwing: 在连接点抛出异常时执行的Advice。
After Returning: 当方法成功执行时执行的Advice。
在应用程序中实现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>
在下一节中,我们将在应用程序中实现不同的Advice。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐



所有评论(0)