您的位置:首页 > 编程语言 > Java开发

java动态代理总结

2012-12-02 11:48 302 查看
具体实现步骤:

第一步,创建接口和实现类,也可以称为目标类!

接口------

public interface targetImp {

public void dosome();

}

目标类-------------

public class target implements targetImp{

@Override

public void dosome() {

// TODO Auto-generated method stub

System.out.println("----doSomething");

}

}

第二步,创建InvocationHandler的实现类,和拦截器类

------------------------拦截器类,作用是在执行目标方法之前或者之后根据需求执行相应操作

public class interceptor {

public void befor(){

System.out.println("---------befor");

}

public void after(){

System.out.println("---------after");

}

}

----------------------------创建InvocationHandler实现类

public class MyHandler implements InvocationHandler {

private Object o;//被代理的对象

private interceptor i;

public MyHandler(){

}

public MyHandler(Object o){//在实例化的时候将目标类引用进来 并且实例化拦截器

this.o=o;

i=new interceptor();

}

@Override

public Object invoke(Object proxy, Method method, Object[] args)//Object proxy:指被代理的对象。 Method method:要调用的方法

throws Throwable { //Object[] args:方法调用时所需要的参数

Object res=null;

i.befor();

res=method.invoke(o, args);//实现目标类的方法

i.after();

return res;

}

}

第三步,创建代理类

public class MyProxy {

public Object getProxy(Object o){

MyHandler h=new MyHandler(o);

return Proxy.newProxyInstance(o.getClass().getClassLoader(),o.getClass().getInterfaces(),h);

}

}

第四步,测试

public class test {

public static void main(String[] args) {

targetImp t=new target();

MyProxy my=new MyProxy();

targetImp res=(targetImp)my.getProxy(t);

res.dosome();

}

}

第五步 测试结果

---------befor

----doSomething

---------after

总结:动态代理的底层是java的反射机制,在框架的使用上面比较多,目标类和接口都是通过后期的配置文件去指定的,所以我们只要指定了类名和接口,通过动态代理的方式去执行方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: