实现jdk动态代理

来源:互联网 发布:php exec函数 不执行 编辑:程序博客网 时间:2024/04/29 21:50

首先要对代理的类写接口,这里采用模拟的数据库添加数据的操作里增加权限校验,日志分析,(伪代码)

IUserDao.java

package proxys;public interface IUserDao {void add();}

UserDao.java

package proxys;public class UserDao implements IUserDao {@Overridepublic 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;}@Overridepublic 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.javapackage 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(); }}

0 0
原创粉丝点击