Android插件化開(kāi)發(fā)基礎(chǔ)之Java動(dòng)態(tài)代理(proxy)機(jī)制的簡(jiǎn)單例子

一、代碼

    package com.sangfor.tree;
     
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
     
    interface ProxyInterFace  {  
        public void proxyMethod(); 
    }  
     
    class TargetObject implements ProxyInterFace  {  
      
        public void proxyMethod() { 
            System.out.println("我被代理了,哈哈!"); 
        }  
    }  
     
    class ProxyObject implements InvocationHandler {  
        //代碼的對(duì)象 
        public Object targetObject; 
       
        public void setTargetObject(Object targetObject) { 
            this.targetObject = targetObject; 
     }  
      
     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {  
         //調(diào)用,傳入一個(gè)目標(biāo)對(duì)象,和對(duì)應(yīng)的對(duì)象參數(shù) 
         System.out.println("代理前 你可以做的事情"); 
         Object object =  method.invoke(targetObject, args);
         System.out.println("代理后 你可以做的事情");
         return object;
     }  
    }  
      
    public class ProxyDemo {  
     public static void main(String[] args) {
        //代理的目標(biāo)對(duì)象 
        ProxyInterFace  target = new TargetObject();
        //代理器 
        ProxyObject proxy =  new ProxyObject();
        proxy.setTargetObject(target);
        //需要傳進(jìn)函數(shù)的handler
        InvocationHandler handler = proxy;
        //生存新的代理對(duì)象
        Object newProxyObject = Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);
        //新的代理對(duì)象執(zhí)行方法
        ((ProxyInterFace)newProxyObject).proxyMethod();
     }  
    }

二、結(jié)果

    代理前 你可以做的事情
    我被代理了,哈哈!
    代理后 你可以做的事情



作者:chen.yu
深信服三年半工作經(jīng)驗(yàn),目前就職游戲廠商,希望能和大家交流和學(xué)習(xí),
微信公眾號(hào):編程入門(mén)到禿頭 或掃描下面二維碼
零基礎(chǔ)入門(mén)進(jìn)階人工智能(鏈接)