java学习日记

静态代理、动态代理
1、静态代理理解:
通过在代码中显式定义一个业务实现类一个代理,在代理类中对同名的业务方法进行包装,用户通过代理类调用被包装过的业务方法

2、动态代理:动态代理包括jdk代理和cglib动态代理
(1)jdk动态代理:通过接口中的方法名,在动态生成的代理类中调用业务实现类的同名方法
(2)通过继承业务类,生成的动态代理类是业务类的子类,通过重写业务方法进行代理

3、jdk动态代理和CGLIB动态代理区别:
JDK动态代理是面向接口,在创建代理实现类时比CGLib要快,创建代理速度快。

CGLib动态代理是通过字节码技术底层生成一个继承代理类的类来实现,然后重写代理类的方法(如果代理类中方法被final修饰,该方法无法代理成功),在创建代理这一块没有JDK动态代理快,但是运行速度比JDK动态代理要快。

Spring中如果要被代理的对象是个实现类,那么Spring会使用JDK动态代理来完成操作(Spring默认采用JDK动态代理实现机制);如果要被代理的对象不是个实现类那么,Spring会强制使用CGLib来实现动态代理。

转载:http://www.cnblogs.com/jiyukai/p/6958744.html
https://www.cnblogs.com/ygj0930/p/6542259.html

你可能感兴趣的:(java学习日记)