Spring AOP原生方式实现

7.1概述

Spring 整合AspectJ框架实现AOP只是Spring框架中AOP的一种实现方式,此方式相对比较简单,实现方便。但此方式底层还是要转换为Spring 原生AOP的实现,Spring AOP原生方式实现的核心有三大部分构成,分别是:
JDK代理。
CGLIB代理。
org.aopalliance包下的拦截体系。

7.2案例架构分析

本小节以Spring中一种原生AOP架构的基本实现为例进行原理分析和说明,其简易架构如图-16所示:
Spring AOP原生方式实现_第1张图片
图-16
其中DefaultAdvisorAutoProxyCreator这个类功能更为强大,这个类的奇妙之处是他实现了BeanProcessor接口,当ApplicationContext读如所有的Bean配置信息后,这个类将扫描上下文,寻找所有的Advistor(一个Advisor是一个切入点和一个通知的组成),将这些Advisor应用到所有符合切入点的Bean中。

7.3案例业务实现

7.3.1业务描述

创建Spring Boot项目,并基于Spring原生AOP的实现为特定业务对象添加简易日志实现。

7.3.2核心业务接口定义及实现

定义RequiredLog注解,用于描述目标业务对象
Spring AOP原生方式实现_第2张图片
定义搜索业务接口,用于定义搜索业务规范
在这里插入图片描述
定义搜索业务接口实现,并使用requiredLog注解描述
Spring AOP原生方式实现_第3张图片

7.3.3日志Advice对象定义

定义LogAdvice对象,基于此对象为目标业务对象做日志增强。
Spring AOP原生方式实现_第4张图片
其中,MethodInterceptor对象继承Advice对象,基于此对象方法可以对目标方法进行拦截。

7.3.4日志Advisor对象定义及实现

创建日志Advisor对象,在对象内部定义要切入扩展功能的点以及要应用的通知(Advice)对象。
Spring AOP原生方式实现_第5张图片
其中,StaticMethodMatcherPointcutAdvisor类为Spring框架中定义的一种Advisor,我们自己写的Advisor可以直接继承此类进行资源整合。

7.3.5日志业务单元测试实现

基于Spring boot项目进行单元测试:
Spring AOP原生方式实现_第6张图片

说明:在spring 框架中,很多功能都是原生AOP进行了功能的扩展和实现。

你可能感兴趣的:(Spring AOP原生方式实现)