代理模式的作用

1、功能增强:在原有的功能上增加了额外的功能。

2、控制访问:代理类不让你访问被代理目标。

实现代理的方式

1、静态代理:代理类是自己手写实现的,自己创建一个java类,表示代理类,同时所代理目标类是确定的。

实现步骤:

1、创建接口,定义方法。
2、创建被代理类,实现1中接口方法。
3、创建代理类实现1中接口方法,且实现的接口方法中需要实例被代理类对象并且使用其实现的方法,然后可以进行功能增强。
4、创建客户端
静态代理优点:实现方便,容易理解。
静态代理缺点:代理目标确定,多个类需要代理则需要写多个代理类,代码冗余,代码量增加,被代理类需要增加或删除新方法时,相关代理类都必须进行相关操作。

2、动态代理:在程序执行过程中,使用jdk中反射机制,创建代理类对象,动态指定要代理的目标类,动态代理是一种创建java对象的能力。

实现方式:

1、jdk动态代理:使用java反射包(java.lang.re)中的类和接口实现动态代理的功能。
2、cglib动态代理:cglib是第三方的工具库,创建一个继承目标类的子类,在子类中重写父类中同名方法。其专门用于创建代理对象。(spring、mybatis框架中都有使用)