反射与动态代理原理
反射与动态代理原理
1 关于反射
反射最大的作用之一就在于我们可以不在编译时知道某个对象的类型,而在运行时通过提供完整的”包名+类名.class”得到。注意:不是在编译时,而是在运行时。
功能:
•在运行时能判断任意一个对象所属的类。
•在运行时能构造任意一个类的对象。
•在运行时判断任意一个类所具有的成员变量和方法。
•在运行时调用任意一个对象的方法。
说大白话就是,利用Java反射机制我们可以加载一个运行时才得知名称的class,获悉其构造方法,并生成其对象实体,能对其fields设值并唤起其methods。
应用场景:
反射技术常用在各类通用框架开发中。因为为了保证框架的通用性,需要根据配置文件加载不同的对象或类,并调用不同的方法,这个时候就会用到反射——运行时动态加载需要加载的对象。
特点:
由于反射会额外消耗一定的系统资源,因此如果不需要动态地创建一个对象,那么就不需要用反射。另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。
2 动态代理
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在两者之间起到中介的作用(可类比房屋中介,房东委托中介销售房屋、签订合同等)。
所谓动态代理,就是实现阶段不用关心代理谁,而是在运行阶段才指定代理哪个一个对象(不确定性)。如果是自己写代理类的方式就是静态代理(确定性)。
组成要素:
(动态)代理模式主要涉及三个要素:
其一:抽象类接口
其二:被代理类(具体实现抽象接口的类)
其三:动态代理类:实际调用被代理类的方法和属性的类
实现方式:
实现动态代理的方式很多,比如 JDK 自身提供的动态代理,就是主要利用了反射机制。还有其他的实现方式,比如利用字节码操作机制,类似 ASM、CGLIB(基于 ASM)、Javassist 等。
举例,常可采用的JDK提供的动态代理接口InvocationHandler来实现动态代理类。其中invoke方法是该接口定义必须实现的,它完成对真实方法的调用。通过InvocationHandler接口,所有方法都由该Handler来进行处理,即所有被代理的方法都由InvocationHandler接管实际的处理任务。此外,我们常可以在invoke方法实现中增加自定义的逻辑实现,实现对被代理类的业务逻辑无侵入。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java编程——优秀程序员(请看这141条你有没有)
让我们面对现实,每个开发人员都希望个人的技术能力以及团队协同能力可以随着时间的推移不断得到提高。但大多数开发者都会提出的一个重要且关键性的问题:如何才能做到这一点呢?接下来,本文作者以自身的开发经验分享在编程时作为开发者应该牢记的 142 条忠告,以成为更好的程序员。 代码外观 1、关于代码布局的讨论越多,越有可能陷入没有结果的争辩中。众所周知的争论有 TAB 键与空格缩进的争论,以及大括号要不要另起一行的争论等。 2、良好的代码格式不一定是你觉得最漂亮的那个。良好的格式是更易于浏览和阅读的代码格式。 3、良好的代码外观揭示了代码的意图。这不是一项艺术工作。 4、我们需要通过良好的外观避免出现代码错误。不是为了表现我们可以创造漂亮的 ASCII 艺术。 5、虽然我们写的代码是通过计算机执行的,但却要给人类阅读。 6、如果有人想写清晰的风格,那么首先让他弄清楚自己的想法。 7、选择一种布局样式,然后坚持使用这种样式,或采用编码标准或样式指南。 8、如果你正在处理的文件不符合项目其余部分的布局约定,那么请遵循该文件中的布局约定。 命名 9、良好的命名具有描述性、正确性和惯用性。 10、如果...
- 下一篇
阿里巴巴 java 1+2+3+hr面
阿里数据技术与产品部门 1面+2面+3面面筋 1面(48分钟):基础+项目 自我介绍,项目介绍,遇到的最大困难是什么?怎么解决的?你觉得你能怎么优化这个项目? 1)讲一下JVM 2)讲一下JVM的分代回收以及具体算法 3)将一下JVM的垃圾收集器,G1和CMS有啥区别? 4)讲一下一个变量从产生到结束所经历的过程,讲一下字符串常量的过程? 5)将一下线程安全问题产生的原因? 6)讲一下乐观锁和悲观锁 7)乐观锁是怎么保证一致性的 8)Integer和int有啥区别,integer中有哪些特殊的函数? 9)讲一下数据库的隔离等级 10)说一下MVCC 11)说一聚簇索引和非聚簇索引的有什么不同 2面(1h):主要聊项目,基础问得不多 主要怼项目,你做过哪些项目,用过哪些技术?你为什么读研?了解哪些框架?你觉得对你技术提升最高的是哪一件事情,提升了你哪一方面的技术? 1)讲一下Spring AOP和IOC的底层实现 2)说一下hashcode的作用?HashMap的底层实现?HashMap和HashTable的区别 3)说一下concurrentHashMap和hashTable在性能上的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池