标签:style blog color io os 使用 ar 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的工厂方法
运行结果:
拦截
何时使用动态代理呢?
动态代理是对要调用某个类的方法进行拦截处理的操作,可以方便的实现类似数据库中的事务回滚等操作~
标签:style blog color io os 使用 ar java 数据
原文地址:http://www.cnblogs.com/ltwy/p/3999890.html