基于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);
}
}