Spring中AOP的实现
一.AOP(Aspect Oriented Programming) 面向切面编程
(1). spring中AOP功能的实现有以下俩种情况:
1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理来实现AOP功能
2.如果目标对象没有实现接口,spring会使用CGLIB的库来实现代理类实现AOP功能
注:spring会在JDK动态代理和CGLIB之间自动选择
(2)理解aop(面向切面编程) 我们学习java应该听说过面向对象编程,这是一种编程思想,思想的主体就是对象。同理,面向切面编程的主体也就是切面。所以理解切面就重要了。我先介绍一个概念:主逻辑业务和系统级逻辑业务。主逻辑业务就是非常重要的逻辑业务,比如一个银行的软件系统的主逻辑业务就是存钱,取钱,贷款,收款等业务,是软件的主要功能。在这些逻辑的基础上我们会有日志功能,打印功能等一些辅助业务,这就是系统逻辑业务,不是太重要,但必须要的业务。
理解AOP必须有分层的概念,咋样分层??比如转账是主业务逻辑,转账的步骤:转账人金额减,被转账人金额加。这是从这里俩步的中间切开,转账人金额减后为切面,被转账人金额加之前为切面,这就是俩个切面。如果逻辑比较繁琐,切面就会跟多,所以说“”切“”是切的业务逻辑,将业务逻辑或者说代码逻辑切成一段一段的,每一段的开头和末尾就是切面。在这个切面上,在不影响主逻辑业务的基础上,加入其它的操作,比如做日志等。这就是面向切面编程。
认识AOP中的一些基本概念,然后在一个一个的例子中,不断的加强对这些概念的理解,同时要能自己表述出每个概念的含义
AOP 面向切面编程
aspect 切面/切面类
joinPoint 连接点
在spring的aop中只有 类中的方法 可以做连接点,每一个方法都可以是一个连接点.
pointCut 切入点
一组连接点的集合
advice 通知/拦截器
用来控制切面类将来到底是织入到切入点的前面、后面或者是抛异常的时候。
前置通知,后置通知,环绕通知,返回后通知,抛异常通知。
adivsor 增强器
用来筛选类中的哪些方法是我们的连接点(哪些方法需要被拦截).
target 目标对象
proxy 代理对象
wave 织入
结合这些概念,我们在对号入座一下我说的转账的例子,切面就是转账人金额减后,被转账人金额加之前。连接点就是减金额或者加金额的方法。切入点就是统称,减金额,加金额。通知就是应该在减金额前面加日志??还是后面加??通知会指定在哪里加。adivsor更像是筛选器,后面慢慢理解。织入其实就是加入,好像挺起来更高大。