00:01
各位同学大家好,刚才呢,咱们完成了此轮的入门案例最终测试,我们也看到了最终的结果,那下面呢,咱把这案例做一个分析,分析一下它的实现过程到底是怎么样的,那咱来看一下这个过程啊,首先说一下我们怎么来分析。咱们来说一下啊,第一部分大家想一下啊,咱们之前创建对象,我们是不是都是new对象,就之前创建对象有一个特点,你类里边那个无参数构造。我这里写一下啊,无参数构造是不是要进行执行啊,所以第一个咱就来试一下,看一下我现在这个对象创建的过程中,无参数构造是否会执行,这是我们说的第一部分,然后第二个咱再看一下啊,大家想一下,现在我们建对象在此方式创建,它肯定不是我们现在如果说咱们不用的方式,我们还可以如何去创建一个。
01:04
那这个大家跟我一起来想一下,不用的方式还能怎么见对象,这可以怎么做,这答案应该很明确,各位应该听过一个东西啊,它叫做反射,所以其实它现在底层就是用反射来见的对象,就咱一会儿具体来说,然后这里边还有第三部分,就是现在就是咱用反射把对象创建了,就是创建那个对象,这个对象呢,最终他要放到哪里,因为后面咱要使用这个对象嘛,它肯定要放到一个地方去,所以要放到哪里,这咱们往上来说,所以咱从三个方面来分析一下这个程序的一个实验过程。那首先我们看第一个对象创建是否会掉它到无仓构造,那咱们来测试一下啊,首先我现在来到user里边,在user中呢,把它的无参数的构造。
02:02
咱们给它创建出来。然后在里边写一下public。User。在里边我做个输出啊,跟咱刚才那个顺序,因为刚才我输入顺序中啊,有一和二这个我就写个零了,再来一个零加一下无参数构造执行了。这是我们写的第一个,然后现在我们来执行一下这个测试代码,看一下它的输出是怎么样的,就验证一下无参数构造是否会执行。那大家看啊,零是不是输出了,那就表示里边的无参数构造它就执行了,这是我们说的第一部分啊,刚才咱们做了测试,证明无参数构造它就执行了。然后这个之后我们继续来看啊,刚才提到目前创建对象它并不是new的方式创建,那它是怎么创建的呢?肯定是用反射进行实现的,就是他通过反射来做到,那这个过程到底是该怎么实现的呢?给大家把这步骤咱说的更详细点,就是它是怎么用反射来建的这个对象的。
03:20
给各位来写一下啊。我想这位置。如何使用反射创建的对象,说它的基本部分,首先第一部分大家看啊,我刚才代码中的测试代码中的第一行是不是加了context上一个对象指定你的配置文件,所以它首先的第一步怎么做,它就会到我们这个类下去加载,你这个叫点插,买到这个配置文件,把文件先进行加载,然后加载之后,因为文件中是不是有内容啊,所以它会对这个插完了文件进行解析操作,解析就是从里边能到它的那种,这个解析有很多技术,比如各位应该听过一个什么就是技术啊,通过这些技术对文件行解析。
04:15
然后解析之后可以获取到。插完了文件中那个bin标签中的属性值,我们这里边主要写了两个,一个是ID属性值,还有一个是class的属性值,所以第三步他会做这个事情,然后做的话我们看一下配置文件,大家看啊。ID是一个唯一是的,或者是因为全有全后怎么做呢?下面进入到我们的第四步操作,就是使用这个反射。根据你类的全路径创建对应的对象,那怎么创建呢?这个反射咱们快速回顾一下啊,大家应该清楚什么是反射,各位可以简单理解为反射,就是得到类的自解码文件,通过Z码文件操作类中所内容,所以首先他怎么做,我就写一段伪代码啊,有一个class里面那个叫。
05:23
然后加上那个class这个属性值,因为它的使用值就是类路径,咱们对象就class,我就叫C。返回,然后返回之后怎么做,用里边的方法来创建对象,这是我们要写到的,那这个代码呢,为了各位看到更明确啊,我在这个里边给大家写个方法,咱们把这个反射代码来快速写一下。我就写到这个位置。反射。创建对象。咱们加上一个。
06:01
Text的,我就叫test user object加个一啊,就为了做个测试,然后在里边反射,首先第一部分刚才提到获取类的这个字节码文件,就是你的class这个对象,那咱用这个。这拿过来,然后它返回的是一个class,这个对象我们叫。这是我们的第一部分。啊,这个我们做一个创建,呃,有异常我给他直接就是。了啊,然后呢,我们做用这个给大家写下,在里边有个方法,它叫。New,这就可以见对象。但是这个方法。
07:04
哎,不是这个啊,是那个new这个方法。但是大家看啊,这个方法呢,虽然说能创建,看到这方法是不是已经过时了,因为咱们现在用的是JDK,如果你是别的版本应该可以,目前这版本中它已经过时了,虽然说也能用,但是咱换一种新的写法给大家写一下啊,ZZ里边的方法new,这样的话可以把这个对象行创建,咱就直接啊回它这个。User。直接转成右侧对象。然后这里边给它做一个强转,这里边我就user,然后咱们可以把user做个输出,所以现在这段代码就是用反射来创建的对象,咱们把这个代码执行一下啊,看一下效果,因为在我们刚才入案例中底层它就是这么做的,用反射把对象进行创建。
08:07
这是咱们看到的这个过程,我把这个代码给各位复制过来,咱方便咱们进行分析啊,在图里边给它直接截过来,放到这位。给它调的啊,稍微小点。就是我们的对单代码。给大家知道这个特点啊,我再重复一遍这个过程啊,我们的做法就是呢,第一部分理解为加载并点差的文件,对文件可以用do进行解析,解析之后得到里面所有内容,包括你bin标签的ID class属性值,然后呢,根据这个属性值用反射把对象进行创建,最终按照这种方式就可以完成对象创建,这是我们的第四部分。然后这个之后我们继续来看啊,刚才咱们提到我对象创建了,你创建对象之后,后面的对象是不是进行使用了,那咱该把对象是不是要放到一个地方去,后面才能用,这个过程中呢,涉及到有一个容器的概念,后面咱们具体说,而他现在会把这个创建对象放到什么地方呢?给大家来说一下啊,我们这里边直接看下它的源码中。
09:22
我点两次shift。然后在里边我们搜索一个类,这个的名字叫default。Default,这个叫list。B factor,也就是它咱们把这个类点开,然后点开之后大家看啊,在这个类里边有这么一个属性,咱们往这里来找啊,它里面有一个属性,也是咱们往下来看啊,这个属性。呃,在这里来看,这个叫什么b DeFine map,它是一个map集合。比如说现在我们用。
10:00
里边把对象创建,把创建好对象就给我们放到这个map机中,在map机构中会存你创建好的这个对象,我把这个拿过来,就是我们的这个部分。把对象它是放到了一个map集合中,就放到了这个里边,然后大家看啊,这个map集合呢,各位都明确是KY6,大家看有K有Y6,然后你明显看到啊,K是不是一个润Y6是不是一个叫DeFine b DeFine这个对象,所以它里边你可以理解为这个map的key是什么呢?就是咱们说那个唯一的一个标识,因为咱后面根据K是不是要取到这个对象。包括大家看啊,我们在测试时候获取对象是不是用这个get b加上你的V标识,这就是的K,另外还一个Y,这个Y是什么呢?强调啊,它就表示是你那个类的那个定义,或者说你类的这个描述的信息。
11:08
这个叫Y6,那咱看一下啊,什么叫描述信息,咱们看一下源码中的这个类叫BY打开。我们看里边啊,有很多相关的这些内容啊,比如说咱们先找一个你看啊,有b class的名称,包括有你的SCO,就是你的作用范围,包括有你是否进行这个初始化等等一些那种,包括你是单还是多例等那种,这个叫类的描述信息,在这里边我们完成这么一个存储。所以说以上啊,就是咱们说的一个基本的过程,给各位再重复一遍啊,刚才提到的我们加载配置文件,然后进行解析得到值,用反射见对象,见完对象之后把它放到map结构中,Map的key为标识,Y6是类的定义信息,或者叫类的描述信息。
12:03
所以以上就是咱们对于入门案例的一个基本分析,大家把这过程他知道,通过入门案例,各位先感受一下此文中的基本的开发过程。这个我们先说到这里。
我来说两句