spring面向切面

本文介绍了Spring的面向切面编程(AOP),包括AOP的概念、目的、特点和底层实现。讲解了AOP的术语,如连接点、切入点、通知、切面等,并通过实例展示了如何定义切入点和不同类型的通知。最后,通过一个简单的UserDao例子,演示了AOP在异常处理和方法调用前后的实际应用。
摘要由CSDN通过智能技术生成

(1)AOP概念
面向切面编程,指扩展功能不修改源代码,将功能代码从业务逻辑代码中分离出来。 主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。
主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
AOP特点:
采用横向抽取机制,取代了传统纵向继承体系重复性代码。
AOP底层实现:
AOP底层使用动态代理实现。包括两种方式:
(1)使用JDK动态代理实现。
(2)使用cglib来实现

  JDK动态代理实现:	只能对实现了接口的类生成代理,而不是针对类,该目标类型实现的接口都将被代理。原理是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。
 1. 定义一个实现接口InvocationHandler的类		2. 通过构造函数,注入被代理类		3. 实现invoke( Object proxy, Method method, Object[] args)方法		4. 在主函数中获得被代理类的类加载器		5. 使用Proxy.newProxyInstance( )产生一个代理对象		6. 通过代理对象调用各种方法
 
 cglib动态代理实现:	针对类实现代理,对是否实现接口无要求。原理是对指定的类生成一个子类,覆盖其中的方法,因为是继承,所以被代理的类或方法最好不要声明为final类型。
 		1. 定义一个实现了MethodInterceptor接口的类	
 		2.  实现其intercept()方法,在其中调用proxy.invokeSuper( )	

代理方式的选择:

  1. 如果目标对象实现了接口,默认情况下回采用JDK的动态代理实现AOP,也可以强制使用cglib实现AOP
  2. 如果目标对象没有实现接口,必须采用cglib库,Spring会自动在JDK动态代理和cglib之间转换
    AOP操作术语:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值