Spring原理之通过反射+配置文件生成对象池

1.Spring通过读取配置文件生成对象原理

通过反射创建对象
    2种方式:
            1.使用Class对象的newInstance()创建该Class对象对应类的实例(要求改Class对应类有默认构造器)
            2.先使用Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法创建该Class对象对应类的实例
              ---  该方式,可选择指定的构造器来创建实例


2.关于反射机制

Java反射,可以知道Java类的内部构造,就可以与它进行交互,包括创建新的对象和调用对象中的方法等。
这种交互方式与直接在源代码中使用的效果是相同的,但是又额外提供了运行时刻的灵活性。使用反射的一个最大的弊端是性能比较差

每个类被加载进内存后,系统就会为该类生成一个对应的 java.lang.Class对象,通过该Class对象即可访问到JVM中的这个类
加载完类之后,在堆内存中会产生一个Class类型的对象(一个类只有一个Class对象),这个对象包含了完整的类结构信息,这个Class对象就像一面镜子,可以看到类的结构
程序在运行状态中,可以动态加载一个只有名称的类(全路径),对于任意一个已经加载的类,都能够知道这个类的所有属性和方法,
对于任意一个对象,都能调用它的任意一个方法和属性

用法:
   作用1:获取类的内部结构
         Java反射API可以获取程序在运行时刻的内部结构,只需短短十几行代码,就可遍历出一个Java类的内部结构,包括:构造方法、声明的域和定义的方法等
         java.lang.Class类的对象,可以通过其中的方法来获取到该类中的构造方法、域和方法(getConstructor、getFiled、getMethod)
         这三个方法还有相应的getDeclaredXXX版本,区别在于getDeclaredXXX版本的方法只会获取该类自身所声明的元素,而不会考虑继承下来的。
         Constructor、Field和Method这三个类分别表示类中的构造方法、域和方法。这些类中的方法可以获取到所对应结构的元数据。
   作用2:运行时刻,对一个Java对象进行操作
         动态创建一个Java类的对象,获取某个属性的值和调用某个方法
         在Java源码中编写的对类和对象的操作,都可以在运行时刻通过反射API来实现
   特别说明:
         clazz.setAccessible(true)   ---  可以获取到类中的private属性和private方法

   Class对象的获取
        1.对象的 getClass()方法
        2.类.class属性     ---  最安全,性能最好
        3.Class.forName(String classFullName) 动态加载类  ---  classFullName是类的全限定名(包.类名)  --- 最常用

   从Class中获取信息
        1.获取信息
             构造器、包含方法、包含属性、包含的Annotation、实现的接口,所在包,类名,简称,修饰符等

                获取内容           方法签名
                构造器                 Constructor<T> getConstructor(Class<?>... parameterTypes)
                包含的方法      
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值