首页 > 代码库 > 动态代理模式的使用
动态代理模式的使用
package 设计模式;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//主题接口interface Isubject{ public void f1(); public void f2();}class Subject implements Isubject{ @Override public void f1() { // TODO Auto-generated method stub System.out.println("调用方法1"); } @Override public void f2() { // TODO Auto-generated method stub System.out.println("调用方法2"); }}//静态代理类的实现class StaticProxy implements Isubject{ //被代理的对象 private Isubject real=null; public StaticProxy(Isubject real) { this.real =real; } @Override public void f1() { System.out.println("调用前处理"); real.f1(); System.out.println("调用后处理"); } @Override public void f2() { // TODO Auto-generated method stub System.out.println("调用前处理"); real.f2(); System.out.println("调用后处理"); } }class Handler implements InvocationHandler{ private Isubject real=null; //一个实际主题 public Handler(Isubject real) { this.real=real; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before"+method.getName()); method.invoke(real, args); System.out.println("after"+method.getName()); return null; }}public class 动态代理2 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //静态代理类的测试 Subject sub=new Subject(); //StaticProxy sp=new StaticProxy(sub); //sp.f1(); ClassLoader loader=sub.getClass().getClassLoader();//获得具体类的加载器 Class[] interfaces=sub.getClass().getInterfaces(); Handler h=new Handler(sub); Proxy proxy=(Proxy) Proxy.newProxyInstance(loader, interfaces, h); ((Isubject) proxy).f1(); ((Isubject) proxy).f2(); }}
动态代理模式的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。