Java動態代理---動態類Proxy的使用

來源:互聯網
上載者:User

標籤:java動態代理---動態類proxy的使用

 代理模式
 
 簡介:
    不直接操作實際的對象,而是通過代理對象間接操作實際對象,具體使用者不知道操作的具體
    對象還是實際對象。

靜態代理

1、例
  1)、被代理類
          package demo3;
        public class AA {
        
            public void method(){
                System.out.println("adfadf");
            }
        }
  2)、代理類
        public class BB {
            private Object aa;
            public BB(Object aa) {
                super();
                this.aa = aa;
            }
            public Object getAa() {
                return aa;
            }
        }
        
  3)、測試
      package demo3;
    public class Example {
    
        public static void main(String[] args) {
            AA aa=new AA();
            BB bb=new BB(aa);
            ((AA)(bb.getAa())).method();
        }
    }

Java動態代理---動態類Proxy的使用
    
1、被代理類介面
package demo2;
public interface IA {

    public String method1(String str,String str1);
    public void method2();
}

2、被代理類
package demo2;
public class A implements IA{

    @Override
    public String method1(String str,String str1) {
        System.out.println("method1------"+str+"------"+str1);
        return str1;
    }

    @Override
    public void method2() {
        System.out.println("method2");
    }
}

3、代理類
package demo2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class HandleProxyA implements InvocationHandler {

    private IA ia;
    
    public HandleProxyA(IA ia) {
        super();
        this.ia = ia;
    }

    /**
     * @param proxy:被代理類
     * @param method :被代理類方法
     * @param args :被代理類方法 方法列表
     * @return 傳回值為被代理類方法傳回值
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        if(args!=null){
            for (int i = 0; i < args.length; i++) {
                System.out.println(args[i]);
            }
        }
        Object result = method.invoke(ia, args);
        
        System.out.println(result);
        
        return result;
    }
}

4、執行個體
      package demo2;

    import java.lang.reflect.Proxy;
    
    public class Example {
    
        public static void main(String[] args) {
            
            IA ia=new A();//被代理
            HandleProxyA proxyA=new HandleProxyA(ia);//代理
            //建立動態代理對象
            IA ia2 = (IA) Proxy.newProxyInstance(ia.getClass().getClassLoader(),ia.getClass().getInterfaces(), proxyA);
            ia2.method1("asdfad","245245");
            ia2.method2();
        }
    }

Java動態代理---動態類Proxy的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.