Java之动态代理

ICommodity接口

public interface ICommodity {

	int commodityPrice(String size);
}

 

ICommodity实现类Commodity

动态代理就是在不改变该实现类的情况下增强该实现类的功能

public class Commodity implements ICommodity{

	@Override
	public int commodityPrice(String size) {
		System.out.println("this commodity size is " + size);
		return 50;
	}

}

 

CommondityDiscountProxy动态代理类

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

public class CommodityDiscountProxy {

	@SuppressWarnings("unchecked")
	public static <T> T getProxy(final int discountCoupon,
			final Class<?> interfaceClass, final Class<?> implementsClass)
			throws Exception {
		return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(),
				new Class[] { interfaceClass }, new InvocationHandler() {
					public Object invoke(Object proxy, Method method,
							Object[] args) throws Throwable {
						Integer returnValue = (Integer) method.invoke(
								implementsClass.newInstance(), args);// 调用原始对象以后返回的值
						return returnValue - discountCoupon;
					}
				});
	}
}

 

测试类

import org.junit.Test;

public class CommodityDiscountTest {

	@Test
	public void getPrice() throws Exception{
		
		ICommodity commodity = CommodityDiscountProxy.getProxy(10, ICommodity.class, Commodity.class);
		int commodityPrice = commodity.commodityPrice("xxl");
		System.out.println(commodityPrice);
		
	}
	
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值