简介
为一个对象提供一个替身. 为代理对象提供额外的功能,增强该对象
模式
静态,JDK动态,Cglib 代理
区别
JDK 又称为 接口代理. 而 Cglib 可以在内存中动态的创建对象,而不需要实现接口
静态代理
略
JDK代理
概述:
1. 代理对象不需要实现接口. 但目标对象要实现接口.
2. 代理对象的生成,是利用JDK的API,动态的在内存中构建代理对象
API:
1. newProxyInstance( ClassLoader loader,Class<?>[] insterface.InvocationHandler h );
使用这个API 即可生成代理对象
步骤
1. 创建接口
public interface ITeacher{
public abstract void teach();
}
2. 实现接口
public class TeacherDao implements ITeacher {
@Override
public void teach() {
}
}
3. 代理工厂
ProxyFactory.class 有俩个核心方法.
ProxyFactory()
getProxyInstance() Object: 根据传入的目标对象利用反射机制返回一个代理对象.
通过代理对象调用目标对象的方法
使用
我们调用 ProxyFactory 的构造方法,将 TeacherDao 传递进去. 只会会通过getProxyInstance() 方法获得代理对象