首页 > 代码库 > java动态代理

java动态代理

动态代理:动态的对一个对象添加代理,以便实现代理模式.

 

java内部集成了动态代理的实现。

实现动态代理需要三个模块:1.动态代理适配器 2.接口 3.实现接口的真实类

 

1.动态代理适配器

package test;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;public class proxy implements InvocationHandler{    Object real;    public proxy(Object real)    {        this.real = real;    }    @Override    public Object invoke(Object arg0, Method arg1, Object[] arg2)            throws Throwable {        if(arg1.getName().equals("jump"))        {            System.out.println("拦截");        }        return null;    }}

这里的适配器实现了如果代理执行jump方法,便进行拦截。

 

2.接口

package test;public interface dosomething {        public void jump();}

 


这里的接口是必须要用的,因为接口可以说明代理和类之间暴露的方法是相同的

 

3.实现接口的真实类

  

package test;public class bean implements dosomething{    @Override    public void jump() {        System.out.println("jump");    }}


这里的真实类bean实现了dosomething接口的方法jump

 

 

好了。 有了这三个必须的模块,就可以在主方法里面创建动态代理了

package test;import java.lang.reflect.Proxy;public class test {        public static void main(String[] args) {        dosomething t = (dosomething) Proxy.newProxyInstance(dosomething.class.getClassLoader(),new Class[]{dosomething.class},new proxy(new bean()));        t.jump();    }    }

这里用的是Proxy.newProxyInstance的工厂方法

运行结果:

  拦截

 

何时使用动态代理呢?

   动态代理是对要调用某个类的方法进行拦截处理的操作,可以方便的实现类似数据库中的事务回滚等操作~

 

java动态代理