zoukankan      html  css  js  c++  java
  • java 动态代理 , 多看看。 多用用。

    import java.lang.reflect.InvocationHandler;
     import java.lang.reflect.Proxy;
     import java.lang.reflect.Method;
     //抽象角色:java动态代理的实现目前只支持接口,不支持抽象类
     interface BusinessFoo
     {
         void foo();
     }
     interface BusinessBar
    {
        String bar(String message);
    }
    //真实角色:真正实现业务逻辑方法
    class BusinessFooImpl implements BusinessFoo
    {
        public void foo()
        {
            System.out.println("BusinessFooImpl.foo()");
        }
    }
    class BusinessBarImpl implements BusinessBar
    {
        public String bar(String message)
        {
            System.out.println("BusinessBarImpl.bar()");
            return message;
        }
    }
    //动态角色:动态生成代理类
    class BusinessImplProxy implements InvocationHandler
    {
        private Object obj;
        BusinessImplProxy() {
        }
        BusinessImplProxy(Object obj) {
            this.obj = obj;
        }
        public Object invoke(Object proxy,Method method,Object[] args) throws Throwable
        {
            Object result = null;
            doBefore();
            result = method.invoke(obj,args);
            doAfter();
            return result;
        }
        public void doBefore(){
            System.out.println("do something before Business Logic");
        }
        public void doAfter(){
            System.out.println("do something after Business Logic");
        }
        public static Object factory(Object obj)
        {
            Class cls = obj.getClass();
            return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new BusinessImplProxy(obj));
        }
    }
    //测试类
    public class DynamicProxy
    {   
        public static void main(String[] args) throws Throwable
        {
            BusinessFooImpl bfoo = new BusinessFooImpl();
            BusinessFoo bf = (BusinessFoo)BusinessImplProxy.factory(bfoo);
            bf.foo();
            System.out.println();
    
            BusinessBarImpl bbar = new BusinessBarImpl();
            BusinessBar bb = (BusinessBar)BusinessImplProxy.factory(bbar);
            String message = bb.bar("Hello,World");
            System.out.println(message);
        }
    }
  • 相关阅读:
    java中set集合的常用方法
    Java的Collection集合的常用方法
    Java集合Collection&Map
    Linux设置中文语言的一种方式
    struts2自定义Interceptor拦截器
    Linux系统官网下载
    idea绿色版+谷歌浏览器绿色版——设置打开jsp文件
    torch.nn.Embedding
    负对数似然(negative log-likelihood)
    Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
  • 原文地址:https://www.cnblogs.com/szw-blog/p/6193053.html
Copyright © 2011-2022 走看看