解决的问题
在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在访问此对象时加上一个对此对象的访问层。
Java动态代理实现方式:
- JDK 自带的动态代理
- Cglib动态代理
JDK 自带的动态代理
public interface People
{
/**
* 交谈
*/
void speak();
}
在实例化test这个对象的时候,我们调用了Proxy的newProxyInstance方法
public class test implements InvocationHandler {
private People people;
// 获取被代理对象信息
public Object getInstance(People people) {
this.people = people;
Class clazz = people.getClass();
return Proxy.newProxyInstance(clazz.getClassLoader(), class.getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
method.invoke(people);
return null;
}
}