实现jdk动态代理
首先要对代理的类写接口,这里采用模拟的数据库添加数据的操作里增加权限校验,日志分析,(伪代码)
IUserDao.java
package proxys;
public interface IUserDao {
void add();
}
UserDao.java
package proxys;
public class UserDao implements IUserDao {
@Override
public void add() {
System.out.println("保存数据");
}
}
代理之前需要将目标对象,封装到InvocationHandler 的子类中,调用目标的方法,在方法中添加其他操作
MyInvocationHandler.java
package proxys;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler {
private Object object;
public MyInvocationHandler(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("权限校验");
Object result = method.invoke(object, args);
System.out.println("日志分析");
return result;
}
}
接下来要测试代理类
ProxyTest.java
package proxys;
import java.lang.reflect.Proxy;
public class ProxyTest {
public static void main(String[] args) {
IUserDao dao=new UserDao();
dao=(IUserDao) Proxy.newProxyInstance(dao.getClass().getClassLoader(),dao.getClass().getInterfaces(),new MyInvocationHandler(dao));
dao.add();
}
}
还没有评论,来说两句吧...