标签:cat val instance project sys string 代理类 ring stat
1. 代理模式:
静态代理
动态代理
package project05; /* 静态代理:让【代理类】替【被代理类】完成一些“非业务”代码,核心代码还是【被代理者】自己完成 代理模式 1.主题接口 2.被代理类 3.代理类 例如:所有方法都增加一个功能:统计运行时间 */ public class test01 { public static void main(String[] args) { //1.创建被代理对象 UserDaoImpl u=new UserDaoImpl(); //2.创建代理对象 UserDaoProxy udp =new UserDaoProxy(u); udp.insert(); } } //1.主题接口 interface UserDao{ void insert(); void delete(); void update(); void select(); } //2.被代理类 class UserDaoImpl implements UserDao{ @Override public void insert(){ System.out.println("添加用户"); } @Override public void delete() { System.out.println("删除用户"); } @Override public void update() { System.out.println("更新用户"); } @Override public void select() { System.out.println("查找用户"); } } //3.代理类 class UserDaoProxy implements UserDao{ private UserDao target; public UserDaoProxy(UserDao target) { super(); this.target = target; } @Override public void insert(){ long start=System.currentTimeMillis(); System.out.println("开始执行insert方法"); //执行真正的代码 target.insert(); long end=System.currentTimeMillis(); System.out.println("结束执行insert方法"); System.out.println("耗时:"+(end-start)); } @Override public void delete() { long start=System.currentTimeMillis(); System.out.println("开始执行delete方法"); //执行真正的代码 target.delete(); long end=System.currentTimeMillis(); System.out.println("结束执行delete方法"); System.out.println("耗时:"+(end-start)); } @Override public void update() { long start=System.currentTimeMillis(); System.out.println("开始执行update方法"); //执行真正的代码 target.update(); long end=System.currentTimeMillis(); System.out.println("结束执行update方法"); System.out.println("耗时:"+(end-start)); } @Override public void select() { long start=System.currentTimeMillis(); System.out.println("开始执行select方法"); //执行真正的代码 target.select(); long end=System.currentTimeMillis(); System.out.println("结束执行select方法"); System.out.println("耗时:"+(end-start)); } }
package project05; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /* 动态代理模式 1.主题接口 2.被代理类 3.代理工作处理器 InvocationHandler 参数列表: proxy:代理类对象 method:代理类要执行的真正方法 args:给method实参列表 返回值:method返回值就是invoke的返回值 4.代理类 Proxy 参数列表: loader:类加载器 interfaces:被代理者的接口 h:代理工具处理器对象 例如:所有方法都增加一个功能:统计运行时间 */ public class test02 { public static void main(String[] args) { System.out.println("ok"); //1.创建被代理对象 UserDaoImpl u=new UserDaoImpl(); //2.获取被代理者的类加载器对象 ClassLoader loader = u.getClass().getClassLoader(); //3.获取被代理者的接口们 Class<?>[] interfaces = u.getClass().getInterfaces(); //4.创建处理器对象 Handler h= new Handler(u); //5.动态创建代理类和对象:在内存自动生成 UserDao ud = (UserDao)Proxy.newProxyInstance(loader,interfaces, h); ud.insert(); } } //1.主题接口 interface UserDao { void insert(); void delete(); void update(); void select(); } //2.被代理类 class UserDaoImpl implements UserDao { @Override public void insert() { System.out.println("添加用户"); } @Override public void delete() { System.out.println("删除用户"); } @Override public void update() { System.out.println("更新用户"); } @Override public void select() { System.out.println("查找用户"); } } //3.代理工作处理器 class Handler implements InvocationHandler { private Object target; public Handler(Object target) { super(); this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { long start = System.currentTimeMillis(); System.out.println("开始执行" + method.getName() + "方法"); // 执行真正的代码 Object value = method.invoke(target, args); long end = System.currentTimeMillis(); System.out.println("结束执行" + method.getName() + "方法"); System.out.println("耗时:" + (end - start)); return value; } }
标签:cat val instance project sys string 代理类 ring stat
原文地址:https://www.cnblogs.com/hapyygril/p/12994849.html