概念:
所谓代理就是自己能做的事不做,而是让别人去做。
简单的一个需求,登陆注册:让代理去检测和做日志。
这里只是简单的模拟生产环境,直接上代码吧:
一个接口类:
package com.xjtu.proxy;
public interface UserI {
void login();
void register();
}
一个实现类:
package com.xjtu.proxy;
public class UserImpl implements UserI {
@Override
public void login() {
System.out.println("login");
}
@Override
public void register() {
System.out.println("register");
}
}
一个代理类:
package com.xjtu.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler {
//目标对象
private Object target;
MyInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("check...");
Object result=method.invoke(target, args);
System.out.println("log...");
return result;
}
}
一个测试类:
package com.xjtu.proxy;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
UserI user=new UserImpl();
user.login();
user.register();
System.out.println("-------------------");
//创建动态代理
MyInvocationHandler handler=new MyInvocationHandler(user);
UserI proxy=(UserI)Proxy.newProxyInstance(user.getClass().getClassLoader()
, user.getClass().getInterfaces(), handler);
proxy.login();
proxy.register();
}
}
输出:
login
register
-------------------
check...
login
log...
check...
register
log...