万字总结之反射(框架之魂)

准备过年看下Spring源码,用来唬人,哈哈哈哈。正经点,是为了在遇到问题的时候,能知其然而知其所以然。但是在开始前,先恶补下基础知识。今天看框架之魂——反射

反射的概述(基础部分开始)

反射是在编译状态,对某个类一无所知 ,但在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法。

这个说太干涩了,没有灵魂,就像下面两张图。

万字总结之反射(框架之魂)

万字总结之反射(框架之魂)

所以咱来举个例子,拒绝没有灵魂。O(∩_∩)O哈哈~

为什么要反射?

如果我们没有Orange类,那该类在编译的时候就会报错找不到该类。这是我们平常使用的“正射”。这个名字是为了和反射相对应,不是官方的术语。

万字总结之反射(框架之魂)

但是这存在着一个明显的缺点,就是在main方法里调用的是Apple类,并没有调用Orange类,所以应该是可以正常调用的,当我想要调用Orange类的时候,再报错即可。但是,事与愿违,事情不是照着我们的想法而发展的。

我们需要一种在编译时不检查类的调用情况,只有在运行时,才根据相应的要求调用相应的类,这就是“反射”。

反射的用途

反射最重要的用途就是开发各种通用框架。很多框架(比如 Spring)都是配置化的(比如通过 XML 文件配置 Bean),为了保证框架的通用性,它们可能需要根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射,运行时动态加载需要加载的对象。

举一个例子,在运用 Struts 2 框架的开发中我们一般会在 struts.xml 里去配置 Action,比如:

<action class="org.ScZyhSoft.test.action.SimpleLoginAction" method="execute"> <result>/shop/shop-index.jsp</result> <result>login.jsp</result> </action>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxwsw.html