00:00
好,那我们刚才通过咱们的入门案例呢?咱们已经知道了该如何在spring的配置文件中去配置一个并该如何获取咱们的IOC容器,如何获取IOC容器中的某一个并对象。那下面呢,那我们就重新创建一个工程啊,然后在这个工程里面,咱们来讲一下这个IOC中,然后基于叉苗来管理病的一些问题啊好,咱们来创建一个module,然后next,然后创建spring框架的时候呢,非常简单,不像是咱们的my be,有核心配置文件,有映射文件。而咱们在中呢,咱们因为现在学习的是IOC,所以说咱们只需要创建配置文件来管理对象就可以啊好,那这个咱们叫做spring_LC,然后下划线XL,这是基于叉L来管理B啊好,然后group ID呢,咱们是com.at硅谷点spring spring。好。然后比如说呀,然后咱们把咱们的这些依赖呢,然后都给它复制过来,然后放在咱们当前的工程的POM点叉ML中。
01:07
好,然后再往下,咱们来创建一个类,比如说这个类叫做学生类,咱们现在呢,把这个学生对象交给IOC容器来管理啊,好,com.at硅谷,然后点spring.po然后点student OK啊。好,那咱们把它的成员变量给设置出来,是in tIgEr类型的sid,然后再往下,然后string类型的s name,然后再往下是类型的H,然后最后一个咱们再来设置一个string类型的gender OK。好,那下面呢,我们来设置它的有参构造,然后还有无参构造,然后还有呢,每一个成员变量所对应的get跟set方法,然后以及我们当前的to string方法。
02:00
OK,那咱们把这个创建完之后啊,我们就可以来创建spring的配置文件。好,选哪个大家要注意是XL configuration file里面的spring conig,比如说这个名字咱们可以随便去取,然后我们刚才在入门案例中咱们就说过,对吧?因为我们在获取IC容器的时候,咱们是需要通过这个配置文件指定一个配置文件来获取的,所以说这个名字大家可以随便去写啊,咱们之前呢,叫application connect,那是因为大家先熟悉一下,等到以后啊,我们再去创建spring的配置文件的时候,反正我是习惯用application context为开头这样的啊好,那下面呢,比如说咱们现在来测试的是spring中的IOC功能,那咱们在这呢,咱们就叫做spring啊,咱们就叫做spring,然后杠ioc.xl,好。行,然后那我们在这咱们就可以来配置咱们student所对应的病,然后并标签,然后它的ID咱们叫做student y,大家注意叫做student one,因为我们在这呢,要给大家做多个例子,所以说咱们的每一个例子呀,给家给大家来写一个并,好当然以后咱们会不会这样去做,大家注意并不会,为什么呢?因为咱们当前的这一个病呢,大家说一个病它提供的就是一个对象,那我之前咱们在介绍spring的时候也说过,Spring为我们所提供的这个对象,它默认就是单立的,所以说我们只需要通过这一获取这个并所对应的对象,我们就可以直接来使用了,那如果我们现在要来设置,要来获取的是一个多例的话,大家也没有必要去设置多个并标签,没有必要去设置多个类型所对应的并in啊,同一个类型的多个并标签,然后因为我们只需要通过一个属性就可以把这个bin所对应的对象。
03:57
由单例来设置为多例,OK吧,好啊,行,那在这咱们把class写上,然后是student类型,OK,就这样去写,然后下面呢,我们来创建一个测试类,好,然后来new一个class com.at硅谷点spring.test然后点叫做IC,然后BY叉ML test OK,这个大家注意啊,好,然后下面咱们来写一个测试方法好。
04:30
好,比如说我们当前咱们要干什么,第一步也是一样的,要来先获取咱们的IOC容器,然后是application context的,然后IOC等于new一个class pass叉l application context的,那我们是不是需要把咱们当前spring的配置文件给拿过来,OK,好,那下面的呢,我们再往下,然后在这咱们是不是需要来获取咱们的B呢,对不对?来获取B怎么来获取呢?这里面提供的方法很多,那我们之前咱们用的是不是应该是根据bin的ID来获取,对不对?所以说咱们在这呢,直接还是用这个方法,那咱们当前呢,这个IOC容器中这个B,它的ID叫studentone,那我们直接在这来设置就可以啊。
05:17
好,那我们现在要怎么做?因为咱们获取的是object的类型,那咱们肯定不能直接用,因为如果说你获取的是object类型的话,那咱们只能来访问的就是object的类型中的方法对不对?好,在这咱们来强转一下,然后so,咱们直接把student给输出就行,那因为我们当前只是创建了一个对象,并没有为我们当前这个对象中的成员变量赋值,所以说我们现在是可以获得这个对象的,但是对象里面的成员变量的值,它都是耐。对吧?这个大家应该都知道,然后我们当前每一个成员变量,它都有一个默认值,比如说基本数据类型int是零,Double是0.0,每一个引用数据类型都是nul OK,啊行,那我们下面咱们再来说一个细节问题,对吧?那大家想一下,我们在讲这个IOC容器在咱们spring中的实现的时候,咱们说了呀,它在底层使用的是工厂模式,因为它最基本的实现叫做be factory,对吧?那它具体是怎么来帮助我们创建对象的呢?那我们之前咱们在没有学习spring的时候,我们要想创建对象,咱们用的是new构造方法,那我们现在呢,Spring它是如何帮助我们创建对象的呢?
06:35
大家来想一下。那我们现在呢,咱们的IOC容器,你要想获取IOC容器,我们是通过配置文件来获取的,所以说它其实就是根据我们当前所配置的这个并in标签,然后来这个创建的对象,那我们的并in标签里面,咱们设置的ID是唯一标识,这个跟咱们创建对象没有关系,但是大家来看这里面有一个class,那所以说我们是不是在解析这个叉L的时候,就可以获取咱们这个bin标签的class属性值,那我们现在是不是就知道了我们当前要管理的对象所对应的类型,那我知道了类型之后,我现在我应该如何创建对象呢?大家想一下,因为这个类型我们是不确定的,因为在spring的IOC容器中,咱们可以配置多个B嘛,对不对?所以说大家一定要看好这个类型,在不确定的情况下,我们要创建某个类型的对象,那我们应该用什么,大家想想,那咱们第一个想到的应该就是反射,对吧。所以说大家注意在。
07:37
IOC容器中,它就是通过反射加工厂模式来帮助我们来创建对象,管理对象的,好,然后那这个东西该怎么去创建,大家想一下,那我知道了它的全类名,类型的全类名之后,我是不是可以通过class点。For name,然后来获取当前这个类型的class对象,然后再通过咱们的class对象中的一个什么方法叫new instance方法,然后来创建这个类型的实例化对象,这个大家还记得吧,是不是好,所以说呢,大家看我们可以来验证一下为什么,因为我们当前通过反射来创建一个类型它的实例化对象的时候,它默认来使用的就是无参构造,比如说呀,我现在我在哪呢?我在我们当前的这个student这个类里面,然后咱们把无参构造给去掉。
08:28
咱们把无参构造给去掉,咱们只留一个有参构造,那这个时候spring能帮助我们把这个对象创建出来吗?大家注意,创建不出来,为什么呢?因为大家记好了,你的无参构造它是固定的,它的写法是固定的,但是咱们的有参构造呢,大家注意,因为我们当前咱们的有参构造中需要来设置各种成员变量,所以说呢,咱们需要为成员变量来进行赋值,所以咱们的有参构造可以设置多种方式,就比如说咱们可以设置多个重载的方法,里面有sid。
09:03
对吧,然后或者说只有s name,或者说有sid和S内,那所以他并不知道我们的有构造是什么,但是他知道我们的无参构造一定是这个样子的,那个样子就是这个样子啊好,所以说在这儿咱们以后所学习到的一些技术里面,只要是涉及到反射,大部分通过反射创建实例化对象,用的都是无参构造,大家要注意啊,好比如说我现在把无参构造删除掉之后,那我们现在咱们再来重新执行,大家会发现这个时候啊,它就出现问题了。对吧?出现了什么问题,他告诉他给我们抛出来了一个异常,什么异常?如果有多个错误的话,咱们说过要从下往上看,大家看一下什么意思叫做no such method exception,这个错大家应该都见过吧,特别是在咱们的反射里面,对吧?反射里面有no such field exception,有no such method exception,指的就是没有足够的方法异常,然后哪一个方法没有呢?大家看一下是student方法,然后在这加上了一个inite。所以说当大家看到这个内容的时候,它其实指的就是这个类型的午餐构造。
10:15
OK吧,好,所以大家一定要注意,在咱们的spring的底层,它其实用其实就是通过加载咱们的配置文件,然后通过我们并标签所设置的这个类型。然后它的反通过反射,然后来调用它的无参构造创建的对象,OK吧,你看在这直接就报错了对吧,你看咱们鼠标放上去之后,他说我们没有一个匹配的什么呀,没有一个匹配的这个构造器,然后在咱们的student里面找到对吧?所以说大家看好了,我们一定要把这个什么给它加上啊,无参给它加上,然后无参构造给它加上,所以说以后大家在写一个类的时候,一定要注意,你可以去设置它的有参构造,但是咱们的无参构造大家也必须要设置,或者说你可以不设置,你可以不设置任何的有参构造,但是无参构造也必须要有,当然呢,你不设置无,你不设置有参构造的时候,那默这个无参构造是默认的对不对,这样的啊行,那这个是我们当前spring它的IOC容器,然后呢,去创建对象的时候的一个细节问题啊。
我来说两句