动态代理与cglib代理

   spring的aop(面向切面编程)思想总结就是八个字“纵向重复,横向抽取”。其思想在很多方面都有体现,例如在Filter中设置字符的编码格式,Intercepter中赋值参数进行登录校验等等。以下图示展示了aop思想的一个重要且常见的用途,我们知道在service的实现层中每次数据操作都要开启事务和关闭事务,这样做相当的麻烦, 运用代理技术生成能够自动开启和自动关闭事务的service代理对象可以解决这个问题,spring aop是通过代理对象实现运行时织入的,这一过程可以通过xml配置或者注解的方式实现(这里不做讨论)。通常的代理技术有动态代理cglib代理,下面就对我所了解的原生的代理技术进行描述。

 

 

一:动态代理

1.编写service和service的实现类

2.构建生成代理对象的工厂类

3.测试

4.测试结果

二:cglib代理

 动态代理的缺陷是所代理的对象必须要实现接口,如果没有接口怎么办,这时可以用cglib代理技术。cglib代理属于第三方代理,要导入额外的jar包,因为cglib代理是基于继承,所以代理对象不能被final修饰。

1.编写service和service的实现类

2.构建生成代理对象的工厂类

3.测试

4.测试结果

由以上的运行结果可知:动态代理,必须要有接口,cglib代理(继承代理对象),类不能被final修饰,cglib因为是继承自代理对象,所以和代理对象类型是一样的,动态代理和代理对象压根就是不相关的,所以和代理对象的类型是不一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值