本文以AOP作为例子,分析AOP实现原理,由于使用AOP肯定需要注入组件(比如切面类),所有自然而然就包括了依赖注入的底层实现过程。
前置内容:
AOP的概念,面向切面编程,主要是运用了动态代理(代理模式)实现,在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式;
为什么需要AOP?拿我公司项目举例,在运单调度(快捷调度,智能调度)和执行的时候,都需要校验一下运单号,但是这部分业务并不是调度和执行业务的主要业务,并且在每一处都要写校验代码,而AOP就提供了一种热插拔的方式,你只要定义一个切面类,这个类专门用来处理校验运单号的业务逻辑,哪里需要就把它切入到指定的位置(使用切点表达式,不过也可以使用注解的方式,就是将这个切面类定义成注解,哪里需要直接@CheckWayBillNos就行了,就是类似于我们使用Spring注解一样的方式)
使用@Aspect定义切面类,使用@Component作为组件注入
将前置通知的方法定义为注解形式