动态代理的简单实现
实体类
package com.work.proxyDemo;
public class User {
private int id;
private String name;
private int age;
public User() {
}
public User(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
被代理的接口
package com.work.proxyDemo;
public interface UserService {
public void addUser(User user);
public void deleteUser(User user);
public void updateUser(User user);
public void queryUser(int id);
}
被代理的真实对象
package com.work.proxyDemo;
public class UserServiceImpl implements UserService {
public void addUser(User user) {
System.out.println("添加一个用户");
}
public void deleteUser(User user) {
System.out.println("删除一个用户");
}
public void updateUser(User user) {
System.out.println("修改一个用户");
}
public void queryUser(int id) {
System.out.println("查询一个用户");
}
}
动态代理类
package com.work.proxyDemo;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//动态代理类
public class ProxyInvocationHandle implements InvocationHandler {
//被代理的对象
private Object target;
public void setTarget(Object target) {
this.target = target;
}
//获取被代理的类
public Object getProxyInstance() {
return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(), this);
}
//执行被代理类中的方法
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
insertLog(method.getName());
Object result = method.invoke(target, args);
return result;
}
public void insertLog(String methodName) {
System.out.println("将要执行" + methodName + "方法!");
}
}
测试类
package com.work.proxyDemo;
public class TestProxy {
public static void main(String[] args) {
//真实被代理的对象
UserServiceImpl userService = new UserServiceImpl();
//创建动态代理类
ProxyInvocationHandle pih = new ProxyInvocationHandle();
//添加被代理的对象
pih.setTarget(userService);
//获取被代理的类对象
UserService proxyInstance = (UserService) pih.getProxyInstance();
//执行被代理类中的方法
proxyInstance.addUser(new User());
}
}
输出结果
将要执行addUser方法!
添加一个用户