首页 > 代码库 > 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动态代理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。