Web层: 它使用REST或Web应用程序公开服务。
业务层: 它实现了应用程序的业务逻辑。
数据层: 它实现了应用程序的持久性逻辑。
将跨领域关注作为一个方面。
定义切入点以指示必须在何处应用方面。
首先,每个关注点的逻辑现在都集中在一个地方,而不是分散在整个代码库中。
其次,业务模块仅包含主要关注的代码。次要关注点已移至方面。
它是用纯Java实现的。
不需要特殊的编译过程。
它仅支持方法执行连接点。
仅提供运行时编织。
有两种类型的AOP代理: JDK动态代理和 CGLIB代理。
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的过程。我们可以在运行时,加载时间和编译时进行织造。
AOP | OOP |
Aspect: 一个封装切入点,Advice和属性的代码单元。 | Class: 一个封装方法和属性的代码单元。 |
Pointcut: 它定义了执行Advice的一组入口点。 | Method signature: 。它定义了执行方法主体的入口点。 |
Advice: 这是跨领域关注点的实现。 | Method bodies: 是业务逻辑问题的实现。 |
Waver: 借助Advice构造代码(源或对象)。 | Compiler: 它将源代码转换为目标代码。 |
Spring AOP | AspectJ |
需要单独的编译过程。 | 它需要AspectJ编译器。 |
它仅支持方法执行切入点。 | 它支持所有切入点。 |
它可以在Spring Container管理的bean上实现。 | 它可以在所有域对象上实现。 |
它仅支持方法级编织。 | 它可以波动字段,方法,构造函数,静态初始化器,最终类等。 |
Before Advice
After Advice
Around Advice
After Throwing
After Returning
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.2.2.RELEASE</version> </dependency>