JavaSE8基础 Proxy 对接口进行动态代理 简单示例
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE8基础 Proxy 对接口进行动态代理 简单示例相关的知识,希望对你有一定的参考价值。
礼悟:
好好学习多思考,尊师重道存感恩。叶见寻根三返一,活水清源藏于零。
虚怀若谷良心主,皓月当空自在王。愿给最苦行无悔,诚劝且行且珍惜。
os :windows7 x64
jdk:jdk-8u131-windows-x64
ide:Eclipse Oxygen Release (4.7.0)
接口类:
package blog.jizuiku6; /** * * * @author jizuiku * @version V17.10.03 */ public interface UserDao { void play(); void sleep(); }
接口实现类:
package blog.jizuiku6; /** * * * @author jizuiku * @version V17.10.03 */ public class UserDaoImpl implements UserDao { @Override public void play() { // TODO Auto-generated method stub System.out.println("play"); } @Override public void sleep() { // TODO Auto-generated method stub System.out.println("sleep"); } }
关键的类出现:
package blog.jizuiku6; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * * * @author jizuiku * @version V17.10.03 */ public class MyInvocationHandler implements InvocationHandler { private Object target = null; // 取消 无参构造 private MyInvocationHandler() { // TODO Auto-generated constructor stub } public MyInvocationHandler(Object target) { this.target = target; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub // 准备部分 System.out.println("正在读档"); // 这行代码相当于 // result = target.method(agrs); Object result = method.invoke(target, args); // 收尾部分 System.out.println("正在存档"); return result; } }
测试类:
package blog.jizuiku6; import java.lang.reflect.Proxy; /** * * * @author jizuiku * @version V17.10.03 */ public class Demo { public static void main(String[] args) { UserDao ud = new UserDaoImpl(); MyInvocationHandler handler = new MyInvocationHandler(ud); ClassLoader loader = ud.getClass().getClassLoader(); Class[] interfaces = ud.getClass().getInterfaces(); // 对接口中的方法 UserDao proxy = (UserDao) Proxy.newProxyInstance(loader, interfaces, handler); // 执行所有的方法时,执行前会有附加操作,执行后也会有附加操作 // 有的时候 用到代理是: 执行前进行权限校验,执行后进行日志记录 // 而这个程序,只是进行简单的演示。不具备实用价值 // 如果要用在工作中的话,有成熟的框架可以使用。但万变不离其宗,万剑也要归宗!Java proxy.play(); proxy.sleep(); proxy.hashCode(); } }
结果:
Java优秀,值得学习。
学习资源:itcast和itheima视频库。如果您有公开的资源,可以分享给我的话,用您的资源学习也可以。
博文是观看视频后,融入思考写成的。博文好,是老师讲得好。博文坏,是 给最苦 没认真。
以上是关于JavaSE8基础 Proxy 对接口进行动态代理 简单示例的主要内容,如果未能解决你的问题,请参考以下文章