好记性烂笔头-代理

145 阅读1分钟

基于Proxy代理
package com.aia.proxy;public interface IApple {  
  /**     * 售卖苹果产品     */   
 public void sale(float money);    
/**     * 提供服务     */    
public void service();
}
package com.aia.proxy;public class AppleImpl implements IApple {   
 @Override    
public void sale(float money) { 
    System.out.println("苹果公司在代理商拿到的货款是:"+money);  
}   
 @Override   
 public void service() {        
    System.out.println("苹果公司提供售后服务...");    
 }
}
package com.aia.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public class Dailishang { 
   public static void main(String[] args) {        
        final AppleImpl apple = new AppleImpl();       
        IApple apple1 =(IApple)Proxy.newProxyInstance(apple.getClass().getClassLoader(), apple.getClass().getInterfaces(), new InvocationHandler() {    
        @Override            
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {           
            Object rtValue = null;             
           if ("sale".equals(method.getName())){                  
               float oldMoney = (Float) args[0];                   
               rtValue = method.invoke(apple, oldMoney * 0.8f);    
            } 
               return rtValue;          
      }       
     });   
      apple1.sale(1000);    
    }
}

基于cglib代理
package com.aia.cglib;public class Apple {   
 /**     * 售卖苹果产品     */   
 public void sale(float money){  
      System.out.println("苹果公司收到货款:"+money);
 }    /**     * 提供服务     */    
    public void service(){        
        System.out.println("苹果公司提供售后服务");  
    }
}
package com.aia.cglib;import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class Dailishang {    
    public static void main(String[] args) {       
     Apple apple = new Apple();       
     Apple apple1 = (Apple) Enhancer.create(apple.getClass(), new MethodInterceptor() {         
     @Override           
     public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {       
         Object rtValue = null;                
        if ("sale".equals(method.getName())){              
              float money = (Float)args[0];                  
              return method.invoke(apple, money * 0.8f);       
         }              
              return  rtValue;           
         }        
    });      
    apple1.sale(10000f);   
    }
}