0


一文读懂Spring AOP的工作原理和机制(面试经)

导览

前言

在上文中,博主介绍了

Spring IoC

的核心原理和用法,相信你可以通过文章中的内容学到了关键的知识点。本文同样介绍Spring的关键知识,是什么呢?

AOP

作为与

IoC

同负盛名的武器,

AOP

展现了Spring另外一面风采,它促进了Spring各类插拔式开发的发展。
在这里插入图片描述

AOP(Aspect-Oriented Programming)必学必看

Aspect-Oriented Programming

(AOP) complements Object-Oriented Programming (OOP) by providing another way of thinking about program structure. The key unit of modularity in OOP is the class, whereas in AOP the unit of modularity is the aspect. Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects. (Such concerns are often termed crosscutting concerns in AOP literature.)

一句话总结

:这是一种面向切面编程的一种技术。通过预编译(

preload

)和动态代理(

running

)实现程序功能的统一维护。AOP是OOP(

面向对象编程

)的延续,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行拆分和隔离,从而使得业务单元间的耦合度降低,提高程序的可重用性和开发效率。

接下来,我们一块看看AOP到底是什么。

1. 核心概念

名词解释Aspect这是一个模块,其中包含一组提供交叉要求的APIJoin point可以插入AOP切面的应用程序中的一个点(位置)Advice这是在方法执行之前或之后要采取的实际操作Pointcut这是一组应该执行Advice的一个或多个连接点Target objectadvised object(建议对象),一种代理对象
上面这些

“武器”

,都在AOP各个方面体现到它们的作用,通过下图我们可以一览无余:
在这里插入图片描述

2. 主要原理

Spring AOP是一个基于代理的AOP框架。这意味着要实现目标对象的方面,需要创建该对象的代理。
如何实现代理?有两种方式:

  • JDK动态代理 Spring AOP的首选方式。只要目标对象实现了一个接口,就会使用JDK动态代理。
  • CGLIB代理 如果目标对象未实现接口,则可以使用CGLIB代理。

如果不理解,我们可以通过下图,发现两种代理方式的异同:

在这里插入图片描述

3. 实践应用

掌握了核心概念和主要原理之后,可以实践一番,且看且行。

3.1 添加maven依赖

POM添加AOP依赖,请注意更新为最新版本号,以下仅为示例:

<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId>
    KartifactId>spring-context-support
</artifactId><version>4.1.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.1.4.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>1.6.11</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.11</version></dependency>

3.2 定义切面Aspect

Write aspect class annotated with

@Aspect

annotation and write point-cut expressions to match joint-point methods.

一句话总结

:通过在class上添加注解

@Aspect

,即可将其转换为AOP中的一个切面(Aspect)。在该切面中,需要通过

point-cut 

表达式匹配连接点(参考核心概念中的示意图)。
代码示意:

@AspectpublicclassEmployeeAspect{@Before("execution(*EmployeeManager.getEmployee(..))")// point-cut expressionpublicvoidlogBeforeV1(JoinPoint joinPoint){System.out.println("EmployeeAspect.logBeforev1():"+ joinPoint.getSignature()-getName());}}

3.3 定义Methods (join point) 切入点

Write

methods

on which you want to execute advices and those match with

point-cut

expressions。

一句话总结

:创建匹配

point-cut 

表达式的连接点,即要执行的函数或方法。
代码示意:

@ComponentpublicclassEmployeeManager{publicEmployeeDTOgetEmployee(Integer employeeId){System.out.println("Method getEmployee() called");returnnewEmployeeDTO();}}

在该示例中,logBeforeV1() 先于getEmployee()方法执行(

@Before

),因为它匹配

point-cut

表达式。


结语

本文主要介绍了Spring AOP的核心原理和实现方法,相关知识是同样是面试必答环节,好好研习一下,可助你通关哦。

走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~

精彩回顾

一文读懂SpringIoC的工作原理和机制(面试经)
一文读懂SpringMVC的工作原理
Springboot中基于X509完成SSL检验的原理与实践
基于springboot+enum配置化实践


在这里插入图片描述

标签: spring 面试 java

本文转载自: https://blog.csdn.net/splendid_java/article/details/142782797
版权归原作者 一叶飞舟 所有, 如有侵权,请联系我们删除。

“一文读懂Spring AOP的工作原理和机制(面试经)”的评论:

还没有评论