1、接口:共同要实现的接口
//接口
public interface UserService {
void add();
void upadate();
void delete();
void query();
}
2、接口实现类,真实角色
//真实角色
public class UserServiceImpl implements UserService{
public void add() {
System.out.println("增加了一个用户");
}
@Override
public void upadate() {
System.out.println("修改了一个用户");
}
@Override
public void delete() {
System.out.println("删除了一个用户");
}
@Override
public void query() {
System.out.println("查询一个用户");
}
}
3、 调用处理程序类InvocationHandler:创建代理角色
public class ProxyInvocationHandler implements InvocationHandler{
//获得真实角色
private Object target;
public void setTarget(Object target) {
this.target = target;
}
//获得代理类
public Object getProxy() {
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
//执行代理方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
log("使用了"+method.getName()+"方法");
Object result = method.invoke(target, args);
return result;
}
public void log(String str){
System.out.println(str);
}
}
4、测试类
public class MyTest {
@Test
public void myTset(){
//真实角色
UserServiceImpl userService = new UserServiceImpl();
//代理角色调用类
ProxyInvocationHandler proxyInvocationHandler = new ProxyInvocationHandler();
proxyInvocationHandler.setTarget(userService);
//生成代理类
UserService proxy = (UserService) proxyInvocationHandler.getProxy();
//执行代理方法
proxy.add();
}
}