反射机制

 

        初识反射机制,blog一篇以记之。

        首先我们要知道反射的作用是什么?在哪里用的到反射,不然就会以为反射只是在画蛇添足。

        反射的作用->实现框架功能。

       举个张老师举烂的例子:

      我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入进我提供的框架中。框架与工具类有区别,工具类被用户的类调用,而框架则是调用用户提供的类。你做的门调用锁,锁是工具,你做的门被房子调用,房子时框架,房子和锁都是别人提供的。
     框架要解决的核心问题

       我在写框架(房子)时,你这个用户可能还在上小学,还不会写程序呢?我写的框架程序怎么样能调用到你以后写的类(门窗)呢? 因为在写程序时无法知道要被调用的类名,所以,在程序中无法直接new某个类的实例对象类,而要用反射方式来做。
整个spring的核心是面向接口编程,举个例子 
       (常规的编程是基于类依赖的 如在类A中,通过B b=new B()的方式建立依赖关系,因为A中要完成某个功能需要用到类B,那么类A依赖类B,所谓面向接口即B实现自某个你定义的接口C,在类A中通过C c=new B()的方式获得类B的引用,这样还并不完善,为了不采用new B()这种方式,通过反射的原理生成B的对象,
         spring中的实现方式为C c=context.getbean("b");这样在类A中你将看不到类B的直接存在和实例化操作,而类B的实例化操作是交给了spring的beanfactory来生成并可以通过其上下文ApplicationContext的实例context通过getBean("beanname")的方式来获取类B的实例,其生成的原理就是上面提到的反射。 上面的这一部分就叫做IOC:控制反转或者叫做依赖注入,反转注入都行
        通过上面的例子你可以注意到类B的实例化不需要我们自己生成了(通常我们都是自己完成实例化),其实例化交给了spring的beanfactory,一句话类B的实例化从程序员的手动生成 转给了 spring框架生成。 也就是说类B的实例化的控制权从程序员的手里交到了spring框架手里。这就是所谓的控制反转,从人控制到框架控制.因为这有悖于传统的方式顾名思义的叫做控制反转。

       这里我用个简单的案例来说明下反射机制:我们在配置文件中写入一组键值对,然后通过读取文件中的键值对来获得要加载的类,

首先我们建一个配置文件,config.properties里面写入一句话 className=java.util.ArrayList

这样我们就写好了一个简单的框架,此时输出为4,我们将配置文件内容改为className=java.util.HashSet,输出结果为3,说明我们从是从配置文件中读到的,至于为什么ArrayList和Hashset会不一样是因为hsahset采用的是哈希算法存储对象。更多关于容器类请看我的另一篇blog—《collection和map

反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过反射 APIs取得任何一个已知名称的class的内部信息,并可于运行时改变fields内容或唤起methods

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值