动态代理

来源:互联网 发布:matlab 数组横向拼接 编辑:程序博客网 时间:2024/05/16 10:29

先定义一个接口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();}}

 

测试结果

验证用户信息退房结束



 

 

 

原创粉丝点击