动态代理与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因为是继承自代理对象,所以和代理对象类型是一样的,动态代理和代理对象压根就是不相关的,所以和代理对象的类型是不一样的

猜你喜欢

转载自blog.csdn.net/lzhq1/article/details/83719135
今日推荐