代码
接口
public interface NewTest {
public void aa();
public void bb();
}
接口实现类
package 代理;
public class NewTestImpl implements NewTest {
@Override
public void aa() {
System.out.println("-------------aa()-------------");
}
@Override
public void bb() {
System.out.println("--------------bb()-------------");
}
}
代理类
package 代理;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class NewClass implements InvocationHandler {
//被代理对象
private Class target;
public <T>T getProxy(Class<T> tClass) {
this.target=tClass;
return (T) Proxy.newProxyInstance(tClass.getClassLoader(), tClass.getInterfaces(), this);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//代理的内容
System.out.println("我是代理对象的内容");
Object invoke = method.invoke(target.newInstance(), args);
return invoke;
}
public static void main(String[] args) {
NewClass newClass = new NewClass();
NewTest proxy =newClass.getProxy(NewTestImpl.class);
proxy.aa();
}
}
注意事项
jdk原生代理是针对接口,被代理的是接口实现类,接收需要用接口。