1.创建接口
package com.test.proxy.demo03;
public interface UserService {
void add();
void delete();
void update();
void query();
}
2.创建接口实现类
package com.test.proxy.demo03;
public class UserServiceImpl implements UserService {
@Override
public void add() {
System.out.println("添加一个用户");
}
@Override
public void delete() {
System.out.println("删除了一个用户");
}
@Override
public void update() {
System.out.println("更新了一个用户");
}
@Override
public void query() {
System.out.println("查询一个用户");
}
}
3.创建代理类
package com.test.proxy.demo03;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class TargetProxy implements InvocationHandler {
//创建代理对象
private Object target;
//用于注入对象
public void setTarget(Object target) {
this.target = target;
}
//获取真正代理对象的方法
public Object getProxy(){
Object o = Proxy.newProxyInstance(TargetProxy.class.getClassLoader(), target.getClass().getInterfaces(), this);
return o;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//增强原来的功能
System.out.println("调用了"+method.getName()+"方法");
//反射调用方法,后面一个是参数
Object invoke = method.invoke(target, args);
//添加日志记录
System.out.println("添加日志");
return invoke;
}
}
4.创建测试类
package com.test.proxy.demo03;
public class TestUser {
public static void main(String[] args) {
//创建被代理对象
UserServiceImpl userService = new UserServiceImpl();
//创建代理对象
TargetProxy targetProxy = new TargetProxy();
targetProxy.setTarget(userService);
//获取真正的代理类
UserService proxy = (UserService) targetProxy.getProxy();
proxy.add();
proxy.delete();
proxy.query();
proxy.update();
}
}