Spring中AOP的实现
AOP(Aspect Oriented Programming) 面向切面编程
spring中AOP功能的实现有以下两种情况:
1.如果目标对象实现了接口,默认情况下会采用JDK的动态代理来实现AOP功能
2.如果目标对象没有实现接口,spring会使用CGLIB的库来实现代理类实现AOP功能
注:spring会在JDK动态代理和CGLIB之间自动选择
名词解释
1.AOP(面向切面编程):把切面类中的代码动态的织入到指定的切入点上
2.aspect(切面/切面类):额外要完成的功能的类,比如日志类(把分离出来的切面动态的植入到指定的方法上)
3.joinPoint(连接点):在spring的aop中只有类中的方法可以做连接点,每一个方法都可以是一个连接点(我们指定的方法就是连接点)
4.pointCut(切入点):一组连接点的集合,多个连接点的集合就是一个切入点,为了方便对连接点的描述,将来这些连接点可能来自不同的类中
5.面向切面编程:把切面类中的代码动态的织入到指定的切入点上
6.advice(通知/拦截器) :用来控制切面类将来到底是织入到切入点的前面、后面或者是抛异常的时候。
通知:指定切面代码织入到切入点的什么位置,例如方法前/后…
7.adivsor (增强器): 用来筛选类中的哪些方法是我们的连接点(哪些方法需要被拦截),可以在切入点中进一步筛选你希望织入的代码连接点(方法)
8.target(目标对象)
9.proxy(代理对象)
10.wave(织入)
学习重点
advice(通知)的类型:
1.前置通知(Before advice):在某些连接点之前执行的通知
2.返回后通知(After returning advice):在某些连接点正常完成后执行的通知(方法正常结束,没有异常,有异常时不起作用)
3.后通知(After (finally) advice):当某些连接点退出的时候执行的通知(不管方法是否正常结束都会起作用)
4.抛出异常后通知(After throwing advice):在某些连接点抛出异常退出时执行的通知
5.环绕通知(Around Advice):包围一个连接点的通知,例如事务的处理,就需要这样的通知,因为事务需要在方法前开启,在方法后提交,以及方法抛出异常时候回滚
注:在spring中,连接点指的就是方法