- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- inquiry客户询盘.pdf
- Innovation_competencies.pdf
- Insect-inspired, actively compliant hexapod capable of object manipulation.pdf
- Infrared spectra and density functional theory calculations of the tantalum and niobium carbonyl din.pdf
- INPHO MATCH-T_DSM中文操作手册.pdf
- Insect Inspired Robots.pdf
- Inspection on SiC coated carbon–carbon composite with subsurface defects.pdf
- Inspection_Certificate-electrical.pdf
- INGEGNERIA_admitted_2011_12.pdf
- InstallingMagentoConnectExtensions4 0.pdf
文档评论(0)