动态代理

先定义一个接口HouseInter

package com.cn;

public interface HouseInter {
	public void rentHouse();
	public void cancelHouse();
}


定义一个实现上面接口的类HouseOwner

package com.cn;

public class HouseOwner implements HouseInter {
	
	public void rentHouse() {
		System.out.println("租房");

	}
	
	public void cancelHouse() {
		System.out.println("退房");

	}

}


再写一个实现InvocationHandler的类ProxyHouse

package com.cn;

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

public class ProxyHouse implements InvocationHandler{
	private Object target;
	public ProxyHouse(Object target)
	{
		this.target = target;
	}
	public Object invoke(Object arg0, Method method, Object[] arg2)
			throws Throwable {
		//接口类的方法执行之前
		System.out.println("验证用户信息");
		//接口类的方法执行
		Object result = method.invoke(target, arg2);
		//接口类的方法执行之后
		System.out.println("结束");
		return result;
	}
	
}


最后写一个测试类TestProxy

package com.test;

import java.lang.reflect.Proxy;

import com.cn.HouseInter;
import com.cn.HouseOwner;
import com.cn.ProxyHouse;

public class TestProxy {
	public static void main(String[] args) {
		HouseInter houseInter = new HouseOwner();
		ProxyHouse proxy = new ProxyHouse(houseInter);
		//创建代理对象
		//这里的参数不用HouseInter.class.getClassLoader()否则会出现类转换异常
		HouseInter hi = (HouseInter)Proxy.newProxyInstance(houseInter.getClass().getClassLoader(), houseInter.getClass().getInterfaces(), proxy);
		hi.rentHouse();
	}
}

 

测试结果

验证用户信息
退房
结束



 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值