动态代理类

因为过去业务总是这样,在调用一个类的开始时候要执行某些操作,在执行后也要执行某些操作,这样我就写了一个动态代理类,来执行这些操作,可是他只能执行接口的方法,这样的话,每一个类,要想有这种功能,就要给自己的方法定义一个接口,这样很麻烦,能不能这个类没有接口,也可以使用动态代理类?
 
下面是我的实现
动态代理类
package Proxy;
 
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
 

public class MethodProxy implements InvocationHandler {
   
    /*
     * 代理对象的实例
     */
    private Object wrapped;
   
    /*
     * 私有的构造方法,不能实例化
     */
    private MethodProxy(Object p) {
        wrapped = p;
    }
   
    /**
     *  实现InvocationHandler接口的方法
     */
    public Object invoke(Object proxy, Method method, Object[] args)
           throws Throwable {
        System.out.println("调用"+method.getClass().getName() + "." + method.getName()+"开始");
        Object obj = method.invoke(wrapped, args);
        System.out.println("调用"+method.getClass().getName() + "." + method.getName()+"结束");
        return obj;
    }
   
   
    public static Object createBuilder(Object toWrap) {
        return Proxy.newProxyInstance(toWrap.getClass().getClassLoader(),
                toWrap.getClass().getInterfaces(),
                new MethodProxy(toWrap));
    }
}
 
测试类
package Proxy;
 

public class TestProxy {
    public static void main(String[] args) {
        IPerson p = (IPerson)MethodProxy.createBuilder(new Person());
        p.say();
        ICat c = (ICat)MethodProxy.createBuilder(new Cat());
        c.catchMouse();
        IPerson pc = (IPerson) c;
        pc.say();
    }
}
 
几个实现
接口
package Proxy;
 
public interface ICat {
    public void catchMouse() ;
}
 
package Proxy;
 
public interface IPerson {
    public void say();
}
 
实现
 
package Proxy;
 

public class Cat implements ICat,IPerson {
 
    /* (non-Javadoc)
     * @see Proxy.ICat#catchMouse()
     */
    public void catchMouse() {
       System.out.println("mouse");
    }
   
    public void say() {
        System.out.println("I'm cat");
    }
 
}
 
package Proxy;
 
public class Person implements IPerson{
   
    public void say() {
        System.out.println("Hello");
    }
 
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值