JavaReflectionInAction.pdfVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaReflectionInAction

Java Reflection Accessing members 简介 Java通过内置的Field、Method、Constructor等Member来描述?一个Class实例的组成部 分,能够让我们以代码编写的视?角去审视已经成型(被载?入内存)的代码,从?而使后续的代码 能够根据审视?自?身来做出?行为动作,从?而使程序在?一定程度上具备了?自动化或者说智能的特 性。 反射成员类图 Java对于上述成员描述的类图如下: 反射的简单应?用 如果我们知道了?一个Class?里的字段,那么我们能够很?方便的完成其get/set?方法的?生 成,如果给定两个Class,那么我们就有机会完成从?一个Class get属性然后set到另外?一个 Class的代码?片段?生成?工作。 来源于那个类(全名),引?用名,??目的类的全名和引?用名。 看?一下控制台,可以copy过去使?用了。 这样做的好处是,当你重构?一个字段名称的时候,编译器会帮你发现错误。不要使?用 BeanCopy之类的?工具,这只有在?非业务代码开发过程中的?一种简化Utils。 Dynamic Proxy 简介 在Java 1.3推出的时候,最为闪耀的?一个特性就是动态代理。 动态代理使?用了字节码?生成的?方式,?生成了??目标接?口的代理,并且将代理所做的?工作委 派给了代理的InvocationHandler,从实现层?面分开了做什么和怎么做,就算不从技术?角度上 审视动态代理,从设计?角度上看,动态代理的隔离关注的设计思想就值得我们学习。 简单?示例 ?首先实现InvocationHandler,确保你需要做什么; public class MockInvocationHandler implements InvocationHandler { /* (non-Javadoc) * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println(InvokeHandler Invoke.); return null; } } 其次,有?一个需要代理的接?口,注意,?一定是接?口; public interface Mock { public String mock(String value); } 最后,将这个接?口?生成Proxy的字节码,如果已经?生成则不需要,然后将 InvocationHandler的实例设置?入Proxy的实例,当调?用Proxy的实例时,就会路由到 InvocationHandler中的invoke中执?行。 @Test public void objectToString() { MockInvocationHandler handler = new MockInvocationHandler(); Mock mock = (Mock) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class?[] {Mock.class}, handler); mock.toString(); System.out.println(==); mock.getClass(); } 动态代理的主要?用途: (1)因为代理的Proxy也实现了预定义的接?口,那么就可以在真正的实现调?用前或者调?用 后执?行?一段逻辑,甚?至替换掉原有的真正实现,那么从?一定程度上讲,这种?方式就是Java最 为原?生的AOP; (2)能够更加?方便的使?用远程调?用,我们调?用?一个Hessian或者Dubbo接?口,其实调?用的 是业务?方提供给我们的接?口的?一个代理,这个代理负责建?立客户端和服务端的Socket链接, 将参数的内容序列化并传输给服务端,服务端处理完成后同步将结果返回给客户端从?而完成 ?一次远程调?用,因此可以看出使?用动态代理将业务代码和框架代码的分离成为可能。 远程调?用框架客户端调?用代码分析 动态代理,通过InvocationHandler来横切的处理逻辑,在业务中使?用的概率不?高,但是 技术层?面是?非常??广泛的,观摩?一个类似的框架,可以使我们更加明?白的使?用?一个?工具。 由于远程框架?非常众多,诸如Hadoop旗下的Avro和前不久移交Apache

文档评论(0)

l215322 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档