原创

什么是'反射'

作者 | 浩说编程
来源 | 公众号:浩说编程
[  用"内容"服务读者 | 让"代码"服务大众  ]
  

反射(Reflection)是Java编程中非常重要的一个技术点,它在架构设计中有着广泛应用,springIOC理念的实现就应用了反射机制。


预备知识

    在学习反射之前,需要了解java类的编译与加载过程

图片


01 | 何为'反射'

    反射,即反向映射。反射是一种通过将class文件反编译成java文件来获取对象中的属性、方法的机制。

    反射是一种机制(特定的工作方式)


02 | 反射的实现

    先给定一个类

图片

    正如上一段所述,应用反射机制需要先获取class对象:

图片

    一、判断获得的对象类型与期望对象类型是否匹配

图片

    二、获取对象

图片

    三、获取属性

        1、获取所有属性

图片

        2、获取特定属性

图片

    四、获取方法

        1、获取全部构造

图片

        2、公有构造

图片

        3、全部公有方法

图片

        4、获取单个方法

图片

    方法比较多,这里先有个印象,重点看下面的应用场景,反射在架构的底层设计有很广泛的应用:


03 | 反射的简单应用:模拟IOC,从配置文件中动态创建bean实例

    IOC(控制反转)是spring的核心思想之一,通过依赖注入实现,而注入的bean对象就是通过反射机制来实现的。
    这再次体现了反射机制的重要性,下面我通过代码来模拟一下这个过程:

    //首先,创建食物类,派生两个分支ChineseFood、AmericanFood

图片

    //现在我需要生产一个ChineseFood,于是我在配置文件里模拟一个 ChineseFood的bean配置(bean配置实际不这么写)

图片

    //模拟bean工厂,实例化配置的bean

图片

    调用示例:

图片

    其实代码并不难,设计思想比较重要:只看静态代码并不知道具体要创建哪种food,当代码运行的时候通过动态加载配置文件来确定需要创建的bean实例类型。

    看到这里你已经了解了反射机制的内容,学会了这个技术点,不管是面试还是工作都会对你有所帮助。

正文到此结束
本文目录