What:什么是代理模式?
代理模式就是可以在不改变目标类的前提下,为目标类额外增加相应的功能。
How:怎么实现代理模式?
why:为什么会存在多种代理方式呢?
因为需求是一个不断迭代的过程,在我们解决需求的同时,我们也会不断的对技术进行更新。我们知道了,静态代理要求目标类和代理类都必须实现同一个接口,扩展容易造成类的膨胀;知道了应用jdk动态代理前提是目标类基于统一的接口,代理方式使系统比较灵活;而cglib不能对final修饰的类进行代理。所以我们可以根据需求来采用相应的代理模式。
where:静态代理,jdk动态代理,cglib动态代理好和不好体现在哪里?
静态代理:对真实对象进行封装,不会修改目标类的代码。
不好:如果多个不同类型的目标对象需要代理时,就的建立多个代理类,造成类的膨胀,代码的冗余。编译期加入,系统不够灵活。
jdk动态代理:可以解决创建多个静态代理的麻烦,避免不断的重复多余的代理;是在程序运行时动态获取目标对象的,采用了反射,而反射机制在生成类的过程中比较高效的。
不好:系统灵活了,性能就低了,jdk动态代理效率比静态代理慢一点;且只能对实现了接口的类进行代理。
cglib动态代理:底层采用了asm来实现,asm在生成类的过程中比较高效,其实一般来说cglib效率比jdk动态代理高。可以对目标类生成一个资料,并覆盖其中方法实现增强。
不好:采用了继承机制,所有不能对fianl修饰的类进行代理。