SpringBoot学习系列之一(反射)

  最近在学习SpringBoot的知识,动起手来学习的时候才发现SpringBoot项目采用了大量的反射机制,晕,作为一个应届毕业生,以前学习反射的时候给我的感觉就是,这个到底用来干嘛的,好像没啥用啊,而且接触的地方也不是非常的多,接触比较多的地方还是JDBC注册驱动的那条语句:

Class.forName("com.mysql.jdbc.Driver");  //注册数据库驱动

  这样肯定是不行的,想要学好SpringBoot的第一步,就是把反射学好。于是,我决定重新把遗忘的而重要的知识捡起来,重新好好地学一下。

  我们带着个两个问题来学:反射是什么?反射怎么用?


 

  反射是什么?

  JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
  要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

  这里用一个类,Person类的加载过程来具体说明一下,如下图

 

 

这里补充一下,当我们的JVM把Person.class加载到内存的时候,会同步的产生关于这个文件的Class对象,这个对象里面封装的就是Person的信息,而且,不管我们new Person()使用多少次,我们的JVM只会为它创建一个Class对象。

我们反射的本质就是得到Class对象之后,通过调用Class中的方法反向的获取Person对象的各种信息。


 

  反射怎么用?

  一、Class对象的获取

   通过上面的讲解,我们知道,要使用反射的关键就是获取到Class对象,然后通过调用Class对象里面的方法,获取到我们想要知道的东西,比如这个类的包路径,都有什么方法等等。而获取Class对象的方法一共有三个,这里一一介绍。

 

  1.Object ——> getClass(),通常应用在:比如你传过来一个 Object

package ydy;

/**
 * 获取Class对象的三种方法之第一种
 * @author dengyan.yao
 *
 */
public class Reflection {
	public static void main(String[] args) {
		
		//获取Class对象的第一种方法
		Person person = new Person();//new的时候产生了一个Person对象和一个Class对象
		Class perClass = person.getClass();//获取Class对象
		System.out.println("获取到的对象:" + perClass);
		
		
	}
}

  

  2、类名.class 的方式得到,该方法最为安全可靠,程序性能更高 

package ydy;

/**
 * 获取Class对象的三种方法之第二种
 * @author dengyan.yao
 *
 */
public class Reflection {
	public static void main(String[] args) {
		
		//获取Class对象的第二种方法
		Class perClass = Person.class;
		System.out.println("获取到的对象:" + perClass);
		
		
	}
}

  

  3、通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值