项目总结——传说中的反射居然是这个样子

       这阵子项目结束之后,大家開始了总结。关于在项目中用到的各种知识,如AOP。CAS,SSO,多线程,分布式缓存。反射,WCF。框架。建库切库等等。

尽管有的知识了解的不是非常深,可是大致上都有了一个认识。那么今天。就让我们来谈谈传说中的反射。

1、是什么

(1).NET中的反射机制

       反射(Reflection)是.NET中的重要机制,通过反射,能够在执行时获得.NET中每个类型(包含类、结构、托付、接口和枚举等)的成员,包含方法、属性、事件,以及构造函数等。

还能够获得每个成员的名称、限定符和參数等。有了反射,就可以对每个类型了如指掌。假设获得了构造函数的信息,就可以直接创建对象,即使这个对象的类型在编译时还不知道。

(2)Java中的反射机制

       JAVA反射机制是在执行状态中。对于随意一个类。都能够知道这个类的全部属性和方法;对于随意一个对象,都能够调用它的随意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

       JAVA反射(放射)机制:“程序执行时,同意改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python。Ruby是动态语言。C++,Java,C#不是动态语言。可是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们能够于执行时载入、探知、使用编译期间全然未知的classes。

换句话说。Java程序能够载入一个执行时才得知名称的class。获悉其完整构造(但不包含methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

(3)究竟是什么

       反射是指一类应用,它们能够自描写叙述和自控制。也就是说。这类应用通过採用某种机制来实现对自己行为的描写叙述(self-representation)和监測(examination)。并能依据自身行为的状态和结果。调整或改动应用所描写叙述行为的状态和相关的语义。主要是指程序能够訪问、检測和改动它本身状态或行为的一种能力。

        举个样例来说,我们每个人都照过镜子。镜子中会展现我们完美的身材。那么这是通过什么实现的呢,小学学过自然科学的都知道。这是光的反射造成的。这就是反射。

        通过反射,我们能够清楚的看到不论什么一个对象的样子(属性和方法)。

当然镜子中的像不是提前准备好放进去的,而是依据现有的对象,在一定条件下。解析出该对象的全部东西。然后展示出来的。这就是反射。

2、为什么

        话说这个反射时怎么产生的,我们为什么要用呢。

之前我们学习面向对象的思想。利用封装将一个对象的内外隔开了,从而降低了与外部的耦合, 同一时候它也影响了灵活性,比方,我们须要改动某个类的属性或方法。或者是为其加入一个方法,那么我们就须要去代码中改动它。尤其是我们在我们在执行过程中须要改变它时,就更加困难了。于是乎反射就来了。

        就像真实世界一样,我们须要把一些东西包装起来。给那些不用知道其内部结构的人用,这叫封装。而有时候又须要把一个东西的内部呈现出来。了解其构造。然后做出对应改变,这叫反射。

3、优缺点

        静态编译:在编译时确定类型,绑定对象,即通过。

        动态编译:执行时确定类型。绑定对象。

动态编译最大限度发挥了java的灵活性。体现了多态的应用。有以降低类之间的藕合性。

        (1)长处:一句话。反射机制的长处就是能够实现动态创建对象和编译,体现出非常大的灵活性,特别是在J2EE的开发中,它的灵活性就表现的十分明显。比方,一个大型的软件,不可能一次就把把它设计的非常完美。当这个程序编译后。公布了。当发现须要更新某些功能时。我们不可能要用户把曾经的卸载,再又一次安装新的版本号,假如这种话,这个软件肯定是没有多少人用的。採用静态的话,须要把整个程序又一次编译一次才干够实现功能的更新。而採用反射机制的话,它就能够不用卸载,仅仅须要在执行时才动态的创建和编译,就能够实现该功能。

        (2)缺点:它的缺点是对性能有影响。使用反射基本上是一种解释操作。我们能够告诉JVM,我们希望做什么而且它满足我们的要求。这类操作总是慢于仅仅直接执行同样的操作。

4、总结

        反射机制是框架技术的原理和核心部分。

通过反射机制我们能够动态的通过改变配置文件(以后是XML文件)的方式来载入类、调用类方法,以及使用类属性。这种话,对于编码和维护带来相当大的便利。在程序进行改动的时候,也仅仅会改动对应的功能就可以了,调用的方法是不用改的。更不会一改就改全身。

        反射事实上就是通过反编译解析出类或dll文件的结构,然后通过遍历得到对应的元素。它就是通过动态解析。得到我们所需的属性和方法。

        在此,我想说,学习一个东西,一定要结合实际,联系生活。看看它是怎么来的,为什么要有。

仅仅有这样。我的学习才干越来越轻松。

posted @ 2017-07-04 09:17  jhcelue  阅读(271)  评论(0编辑  收藏  举报