00:00
OK,那下面呢,我们再来看一个非常有意思的内容,它叫什么呢?它叫做factory b。哎,这个东西大家感觉熟悉不熟悉啊,我们之前咱们在讲IOC的实现的时候,咱们是不是讲过一个IOC最基础的一个实现叫做b factory,那个东西叫并工厂,这个东西叫什么叫工厂并?好,那它俩有什么区别呢?区别很大,Bin factory那个东西啊,大家一定要注意,它是我们IOC最基本的实现,它的作用就是帮助我们来管理B的,然后但是呢,咱们的factory bin,这是一个工厂病,也就是说这个东西它是专门来作为一个B,然后交给咱们的IOC容器来管理的。好,那什么叫做工厂病呢?那咱们把这个B去掉,那我们当前这个对象,它对应的就是一个工厂。那工厂呢,就是工厂模式,然后我们来隐藏了某个对象的创建过程,对不对,然后可以直接帮助我们来提供这个对象,那这个工厂为什么咱们不能直接创建一个工厂呢?然后为什么我们要来使用工厂B呢?大家注意你用普通的工厂和我们当前咱们专门的一个工厂病它有什么区别?比如说大家注意我在这儿有一个东西叫做user factory factory factory。
01:20
啊,比如说我们现在有一个用户工厂,那这个用户工厂是用来创建哪个对象的,那把factory去掉,那咱们剩下的优点就是他创建的对象。建名实义嘛,对不对,好,然后所以说这个大家看好了,好,那我如果我们现在用的是一个普通的工厂,然后我们还有一个叫做user factory b,然后咱们现在是有这两个啊,那这个普通的工厂,大家说我们现在应该怎么来管理它,既然咱们用到了IOC,那我们就要把这个工厂交给IOC容器来管理好,然后那如果我们要想用到工厂的功能,那我们是不是就需要干什么,先通过先获取IOC容器,再获取IOC容器中的这个工厂,工厂的并所对应的对象,然后当我们获得了工厂之后,然后我们就可以通过工厂来获取它所创建的对象,这个优的对象,但是我们现在用了factory be之后,它就可以把咱们中间的一个过程给他省略掉,哪一个过程就是我们来获取工厂的过程,也就是说如果我们当前咱们把。
02:27
这个factory bin然后配置到了我们的IOC容器中,然后这个数虽然说我们配置的bin的类型是factory bin的类型,但是当我们去获取它的时候,我们可以直接来获取当前这一个工厂所提供的对象。这个大家要听好啊,然后咱们可以直接来获取这个工厂所提供的对象,这个大家一定要注意好,然后所以他给咱们普通的工厂就少了一个步骤,咱们不需要先来获取工厂再获取对象,而是直接把它配置到IOC容器中,我们就可以直接来获取我们的factory bin所提供的对象,OK吧,好。
03:07
那我们下面咱们再来看一下它具体的一个这个factory b具体的一个内容啊,然后大家看一下啊,你看这个factory b是个接口,所以说我们是不是在用的时候需要创建实现类来实现这个接口,它有一个泛型,就是我们当前工厂所提供的类型,知道吧,然后大家再往下你看啊,咱们这里面有几个方法,第一个叫get object,叫做获取对象,然后第二个叫做get object type,咱们所获取的对象的类型,还有一个呢,叫什么?叫做is single,表示的是是否单例。这三个方法。大家看一下啊,通过方法名咱们就知道是干啥的,好,然后那我们当前咱们的fey ban,咱们说了,你把它配置到IOC容器中,咱们所获取的是我们当前的factory,并所提供的对象,到底是啥意思呢?大家注意,比如说我们现在呢,咱们在这儿啊,然后来创建一个。
04:07
包,这个包咱们叫Facebook叫factory工厂,然后我们在这来创建一个类,这个类咱们就叫做user factory b OK,行,然后我们需要让他去实现咱们的factory病这个接口,它的泛型,我要提供的是什么对象,U对象,然后咱们下面把这个方法给重写一下,大家注意啊,三个方法让我们重写两个,那说明这个方法不是抽象方法,它一定有一个默认的方法体,对吧?好,然后那我们点击OK,然后我们再来看咱们的ban factory,来看factory ban啊,好,然后来找到我们最后的is single是否单立,是否单立,是单利OK吧,行,然后咱们把这个关掉,然后大家看好了,这个时候呢,我们需要怎么去做,然后比如说我们当前的user factory b,它所提供的对象就是咱们的用户对象,来在这拗一个user。
05:08
然后我们所提供的对象的类型是什么,那什么类型呢?user.class呢,因为它的返回值是一个class对象,所以说咱们直接把user的class对象返回就行,好,然后那我们来,那我们现在呢,然后咱们在这再创建一个咱们的spring的配置文件,然后比如说这个叫做spring,然后杠Facebook to。啊,RY,好,然后咱们在这来创建一个叫spring factory,然后我们把谁配置进来,现在咱们还需要去配置我们的这个U吗?不需要,我们还需要去配置一个普通的工厂吗?不需要,我们只需要干什么,把咱们当前的user factory病给配置进来就可以了。好,然后我们看到的是把这个并配置到了IOC容器中。但是其实当IOC容器在。
06:04
加载当我们去加载咱们的这个配置文件获取IOC容器的时候,它其实是把谁交给了IOC容器,把我们当前user factory b里面咱们的get object方法所返回的对象交给了IOC容器。这个答案能听懂吗?我再说一遍啊,然后虽然说我们在这配置的这个B是user factory b,但是我们真正交给IOC容器去管理的对象是我们当前这里面get object的方法所返回的对象。OK吧,所以说呀,你在这看到的是这个B,但是其实呀,在IOC容器中有一个什么类型的B,记好U的类型的BOK吧,所以说我们在这咱们来进行一个测试,来new一个class,然后这个咱们就叫做哎,这个FA叫factory b,然后test好,然后我们在这来创建一个方法返回是wall的叫test,然后factoryb,好,然后我们先来获取咱们的IC容器,然后IOC等于六一个class pass叉l application contest,然后把咱们当前的配置文件,然后复制过来,好,然后下面咱们通过IC我就可以获取谁了,大家注意啊,来直接获取user类型的病就可以了啊。
07:34
好,就这。好,咱们在这直接来获取这个优的类型的B就行,为什么?这就是咱们的factory bin的好处呀,对不对?然后我们把factory并配置到IOC容器中,咱们并不是把这个类型交给了IOC容器管理,而是把这个类型中,然后get object的方法的返回值交给了IOC容器,OK吧,所以说这里面才会有一个什么什么方法,就is single的方法,就是我们当前这一个factory b所提供的对象是否为单利。
08:10
能听懂吧,好,下面咱们在这儿咱们来测试一下,大家看啊。好,然后我们现在咱们来一个测试,大家来看你看它好使不好使。大家看一下好使不好使,没有任何问题对不对?咱们在这是不是就把这个对象给获取到了,那如果我们当前的IOC容器中没有这个U点所对应的病,咱们能获取到它吗?因为我们是通过类型来获取的,OK吧,所以说这说明我们的IOC容器中一定有一个U的类型的病,而user类型的病我们自己配置了没有?大家看一下这里面有配置吗?没有配置,为什么咱们没有配置?为什么没有配置咱们却能够获取到呢?就是因为咱们用到了factory bin的功能,然后当我们把它以一个bin的方式来配置的时候,那我们当前就会把他所提供的对象,也就是它的get object的方法所返回的对象交给IOC容器,OK吧,行。
09:10
好,这是咱们的factory be有同学老师,为什么只有一个实例化,这还用说吗?啊,因为第二步是干嘛的,第二步是我们的这个。依赖注入我们,并没有为我们当前的属性进行扶持。对吧,因为当前咱们的这个b user所对应的B也不是我们自己配的,而是我们有通过user user factory bin,然后将这个对象交给IC容器的,对吧,所以这个bin咱们并没有干嘛呀,手动去为属性赋值,然后还有呢,第三个步骤初始化,你bin你都没有设置呢,初始化。是不是需要通过B中的一个属性来进行设置初始化的方法,对不对,销毁就更不说了啊好行,这是咱们当前的一个factory b,然后我们在这呢,咱们来给大家写一下啊,这个东西它有什么样的一个作用,然后呢,咱们的factor b啊大家注意啊,好,然后咱们是一个接口对吧,然后咱们这个,嗯,然后需要啊是创建,创建一个类啊,然后实现该接口,好然后它其中有几个方法,其中有三个方法,首先第一个方法,大家注意叫get object的方法干什么的,然后将方法然后提供提供一个对象,然后交给谁IOC容器来管理。
10:40
管理好,然后再往下,咱们在这有这个get object type方法,然后这个方法干什么的,大家注意,然后来设置咱们所提供所提供对象的类型,好还有最后一个方法叫什么,然后叫做is higoten,是否单立,咱们把它复制过来啊,来写到这第三个方法呢,然后是它好,然后这个是什么意思,所提供的对象,然后是否单立。
11:13
然后这个东西该怎么用,大家注意,然后当我们把谁这个factory b。哎,当我们把factory病的实现类的实现类,然后配置为一个病史,配置为并时,配置为并时,好,然后咱们会将谁呀,会将我们当前当前类中,当前类中get object的方法所返回的对象交给谁IOC容器来管理。好,这个大家注意啊,当factory b的实现类配置为一个B时,咱们会将当前类中的get object方法所返回的对象交给IOC容器管理,那所以说大家想啊,这个就是我们知咱们在最开始的时候,咱们讲它跟普通的工厂有什么区别,如果你现在就是一个普通工厂,那我们现在咱们是不是需要先把工厂配置为一个B,然后呢,再获取IOC容器获取工厂。
12:19
获取工厂所对应的对象,然后我们在通过工厂获取我们工厂所提供的对象,但是我们现在用了factory b之后,我们只需要把它配置为一个B,我们就可以直接从IOC容器中来获取他所提供的对象了,也就是它的get object的方法所返回的对象,OK吧,行。大家注意这个东西啊,以后用的还是很多的,知道吧,就比如说我们在SSM里面spring去整合my be的时候,对吧,咱们就会用到一个叫circle session factory病,叫做circle session factory病,这个东西就是一个工厂病,然后当我们把这个东西配置为一个病之后,我们就可以直接来使用这个工厂病所提供的对象,OK吧啊。
我来说两句