动态代理
静态代理
先创建一个接口类
public interface IUser {
void show();
}
然后创建一个接口实现类,Impl是接口实现类的意思
public class UserImpl implements IUser{
public UserImpl(){}
@Override
public void show() {
System.out.println("展示");
}
}
然后写个代理类
public class UserProxy implements IUser{
IUser user;
public UserProxy(){}
public UserProxy(IUser user){
this.user = user;
}
public void show(){
user.show();
System.out.println("调用了show");
}
}
测试一下
public class ProxyTest {
public static void main(String[] args){
IUser user = new UserImpl();
IUser UserProxy = new UserProxy(user);
UserProxy.show();
}
}
输出
展示
调用了show
动态代理
但是因为一个函数一个函数调用很麻烦,所以我们用动态代理
他要在运行的函数写一句proxy.newProxyInstance(类加载器,代理的接口,InvocationHandler(调用处理器)(要做的事情写到里面会执行))
我们先自己写一个InvocationHandler
public class UserInvocationHandler implements InvocationHandler {
IUser user;
public UserInvocationHandler(){
}
public UserInvocationHandler(IUser user){
this.user = user;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Exception {
method.invoke(user, args);
return null;
}
}
ok,我们回到主函数,给他们赋值
public class ProxyTest {
public static void main(String[] args){
IUser user = new UserImpl();
InvocationHandler userinvocationhandler = new UserInvocationHandler(user);
IUser iuser = (IUser) Proxy.newProxyInstance(user.getClass().getClassLoader(), user.getClass().getInterfaces(),userinvocationhandler);
iuser.show();
}
}
OK,成功输出
展示

浙公网安备 33010602011771号