📅  最后修改于: 2021-01-11 05:16:13             🧑  作者: Mango
该应用程序通常是多层开发的。典型的Java应用程序具有以下几层:
每一层的职责不同,但是有一些适用于所有层的通用方面是日志记录,安全性,验证,缓存等。这些通用方面称为跨领域关注点。
如果我们分别在每一层中实现这些问题,则代码将变得更加难以维护。为了克服此问题,面向方面的编程(AOP)提供了一种解决跨领域问题的解决方案。
它确保在一个内聚的代码组件中定义跨领域关注点。
AOP (面向方面的编程)是一种编程模式,可通过允许横切关注点分离来提高模块化。这些跨部门关注点与主要业务逻辑不同。我们可以向现有代码添加其他行为,而无需修改代码本身。
Spring的AOP框架可帮助我们实现这些跨领域的关注。
使用AOP,我们可以在一处定义通用功能。我们可以自由定义应用此功能的方式和位置,而无需修改应用新功能的类。现在,可以将横切关注点模块化为特殊类,称为Aspect 。
方面有两个好处:
这些方面具有要实施的责任,称为建议。我们可以在一个或多个连接点将方面的功能实现到程序中。
横切关注点是我们要在应用程序中的多个地方实现的关注点。它影响整个应用程序。
代理:这是在将建议应用于目标对象之后创建的对象,称为代理。 Spring AOP实现了JDK动态代理,以使用目标类和建议调用创建代理类。这些称为AOP代理类。
AOP和OOP之间的区别如下:
AOP | OOP |
---|---|
Aspect: A code unit that encapsulates pointcuts, advices, and attributes. | Class: A code unit that encapsulates methods and attributes. |
Pointcut: It defines the set of entry points in which advice is executed. | Method signature: It defines the entry points for the execution of method bodies. |
Advice: It is an implementation of cross-cutting concerns. | Method bodies: It is an implementation of the business logic concerns. |
Waver: It constructs code (source or object) with advice. | Compiler: It converts source code to object code. |
AOP和OOP之间的区别如下:
Spring AOP | AspectJ |
---|---|
There is a need for a separate compilation process. | It requires the AspectJ compiler. |
It supports only method execution pointcuts. | It supports all pointcuts. |
It can be implemented on beans managed by Spring Container. | It can be implemented on all domain objects. |
It supports only method level weaving. | It can wave fields, methods, constructors, static initializers, final class, etc. |
AOP建议有五种类型,如下所示:
在建议之前:在连接点之前执行的建议被称为建议之前。我们使用@Before注释将建议标记为Before建议。
咨询后:在咨询点之后执行的建议在连接点之后执行。我们使用@After注释将建议标记为After建议。
围绕建议:在连接点之前和之后执行的建议被称为围绕建议。
投掷建议后:当连接点抛出异常时执行的建议。
返回建议后:当方法成功执行时执行的建议。
在应用程序中实现AOP之前,我们需要在pom.xml文件中添加Spring AOP依赖项。
Spring Boot Starter AOP是提供Spring AOP和AspectJ的依赖项。其中AOP提供基本的AOP功能,而AspectJ提供完整的AOP框架。
org.springframework.boot
spring-boot-starter-aop
2.2.2.RELEASE
在下一节中,我们将在应用程序中实现不同的建议。