1、JDK动态代理实现
代码:
- 接口类
public interface IProductProducer {
void saleProduct(Float money);
}
- 实现类
public interface IProductProducer {
void saleProduct(Float money);
}
- 测试类
public class ProxyTest {
public static void main(String[] args){
final ProducerImpl producer = new ProducerImpl();
IProductProducer iproducer = (IProductProducer) Proxy.newProxyInstance(producer.getClass().getClassLoader(), producer.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
for (Object oj: args){
System.out.println(args);
}
Object result = null;
System.out.println("商品售卖前!");
result = method.invoke(producer, (Float)args[0]*0.8f);
System.out.println("商品售卖后!");
return result;
}
});
iproducer.saleProduct(1000f);
}
}
运行结果:
2、cglib动态代理实现
代码:
- 业务类
public class CglibProxy {
public void saleProduct(Float money) {
System.out.println("商品售卖中,价格:"+money);
}
public void backProuct(){
System.out.println("退货了!");
}
}
- 测试类
public class CglibTest {
public static void main(String[] args){
final CglibProxy cglibProxy = new CglibProxy();
CglibProxy cglibProxy1 = (CglibProxy) Enhancer.create(cglibProxy.getClass(), new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
for (Object oj: objects){
System.out.println(objects);
}
Object result = null;
System.out.println("商品售卖前!");
if (objects.length <= 0){
result = method.invoke(cglibProxy);
}else {
result = method.invoke(cglibProxy, (Float)objects[0]*0.8f);
}
System.out.println("商品售卖后!");
return result;
}
});
cglibProxy1.saleProduct(200f);
cglibProxy1.backProuct();
}
}
运行结果: