Spring源码分析(一)

本文详细分析了Spring AOP的实现原理,通过一个小例子展示了AOP的使用流程,包括导入AOP模块、定义业务逻辑和切面类、配置通知方法和开启注解AOP模式。重点探讨了@Aspect、通知注解、切入点表达式以及@EnableAspectJAutoProxy的作用。通过源码解析,揭示了AOP如何在bean初始化前后进行操作,涉及BeanPostProcessor和BeanFactory的相关接口。
摘要由CSDN通过智能技术生成

本文以AOP作为例子,分析AOP实现原理,由于使用AOP肯定需要注入组件(比如切面类),所有自然而然就包括了依赖注入的底层实现过程。

前置内容:

AOP的概念,面向切面编程,主要是运用了动态代理(代理模式)实现,在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式;

为什么需要AOP?拿我公司项目举例,在运单调度(快捷调度,智能调度)和执行的时候,都需要校验一下运单号,但是这部分业务并不是调度和执行业务的主要业务,并且在每一处都要写校验代码,而AOP就提供了一种热插拔的方式,你只要定义一个切面类,这个类专门用来处理校验运单号的业务逻辑,哪里需要就把它切入到指定的位置(使用切点表达式,不过也可以使用注解的方式,就是将这个切面类定义成注解,哪里需要直接@CheckWayBillNos就行了,就是类似于我们使用Spring注解一样的方式)

使用@Aspect定义切面类,使用@Component作为组件注入

将前置通知的方法定义为注解形式

 
使用注解注入到指定位置


下面来个小例子吧
具体流程如下:
* 1、导入aop模块;Spring AOP:(spring-aspects)

* 2、定义一个业务逻辑类(MathCalculator);在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出现异常,xxx)

* 3、定义一个日志切面类(LogAspects):切面类里面的方法需要动态感知MathCalculator.div运行到哪里然后执行;

*     通知方法:
*        前置通知(@Before):logStart:在目标方法(div)运行之前运行
*        后置通知(@After):logEnd:在目标方法(div)运行结束之后运行(无论方法正常结束还是异常结束)
*        返回通知(@AfterReturning):logReturn:在目标方法(div)正常返回之后运行
*        异常通知(@AfterThrowing)&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值