代理

匿名 (未验证) 提交于 2019-12-02 23:55:01

静态代理

public interface Subject {     void dealTask(String taskName); }  public class RealSubject implements Subject {     @Override     public void dealTask(String taskName) {         System.out.println("Running Task:" + taskName);         try {             TimeUnit.MILLISECONDS.sleep(1000);         } catch (InterruptedException e) {             e.printStackTrace();         }     } }  public class ProxySubject implements Subject {     private Subject delegate;      public ProxySubject(Subject delegate) {         this.delegate = delegate;     }      @Override     public void dealTask(String taskName) {         long startTime = System.currentTimeMillis();         delegate.dealTask(taskName);         long endTime = System.currentTimeMillis();         System.out.println("Running time:" + (endTime - startTime) + " timeMills");     } }  public class SubjectStaticFactory {     public static Subject getInstance(){         return new ProxySubject(new RealSubject());     } }  public class Client {     public static void main(String[] args) {         Subject proxy=SubjectStaticFactory.getInstance();         proxy.dealTask("DBQuery by static proxy");     } } 

动态代理

public class SubjectInvocationHandler implements InvocationHandler {     private Object delegate;      public SubjectInvocationHandler(Object delegate) {         this.delegate = delegate;     }      @Override     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {         long startTime = System.currentTimeMillis();         method.invoke(delegate, args);         long endTime = System.currentTimeMillis();         System.out.println("Running time:" + (endTime - startTime) + " timeMills");         return null;     } }  public class DynProxyFactory {     public static Subject getInstance() {         Subject delegate = new RealSubject();         InvocationHandler handler = new SubjectInvocationHandler(delegate);         Subject proxy = null;         proxy = (Subject) Proxy.newProxyInstance(delegate.getClass().getClassLoader(),                 delegate.getClass().getInterfaces(), handler);         return proxy;     } }  public class Client {     public static void main(String[] args) {         Subject proxy=DynProxyFactory.getInstance();         proxy.dealTask("DBQuery by dynamic proxy");     } }

cglib代理

public class CgProxyFactory implements MethodInterceptor {      private Object target;      public CgProxyFactory(Object target) {         this.target = target;     }      public Object getProxyInstance() {         Enhancer en = new Enhancer();         en.setSuperclass(target.getClass());         en.setCallback(this);         return en.create();     }      @Override     public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {         long startTime = System.currentTimeMillis();         method.invoke(target, objects);         long endTime = System.currentTimeMillis();         System.out.println("Running time:" + (endTime - startTime) + " timeMills");         return null;     } }  public class Client {     public static void main(String[] args) {         Subject target = new RealSubject();         RealSubject proxy= (RealSubject) new CgProxyFactory(target).getProxyInstance();         proxy.dealTask("DBQuery by cglib proxy");     } }

  

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!