00:00
好,那下面呢,我们来看一下基于XML做自动装配这个问题,首先呢,大家要知道什么叫做自动装配。那自动装配呢,其实就是根据咱们指定的策略,然后在IOC容器中呢,去匹配到某一个B,然后自动为指定的B。所依赖的类类型的属性或接口类型的属性来进行扶持。好,那这句话是什么意思呢?那我们之前呢,咱们在讲依赖注入的时候,对吧?我们为不同类型的属性呢来进行了扶持,比如说咱们类类型的属性,然后我们一般用的都是ref,然后呢,咱们的这个字面量类型的属性,咱们用的都是value,那这个value呢,字面量类型的属性值不同的咱们的value所设置的也不同,但是呢,当我在我们给这个类类型的属性赋值的时候,其实我们只需要来找到IOC容器中的某一个bin所对应的对象,对吧?然后通过ref属性来引用这个bin的ID,那我们就可以把这个bin所对应的对象来为咱们的类类型的属性,或者说是咱们接口类型的属性赋值。
01:09
好,那咱们的自动装配呢,也就是说这个过程咱们就不需要去写了,也就是说我们就不需要再去写property标签,然后来指定某一个属性,然后通过我们当前咱们的ref去引用某一个病的ID了,咱们只要来设置自动装配之后,然后那我们当前这个bin里面所有类类型的属性,它都会在咱们IOC容器中去找到所匹配的bin,然后来自动为当前属性复制好,那下面呢,我们就来进行一个场景的模拟啊,然后比如说咱们用最经典的三层架构。然后呢,我们有控制层,咱们有业务层,还有咱们的持久层,然后呢,咱们的控制层其实就是solve,但是我们现在这是一个Java工程,再说了,我们学习完框架之后,咱们就不用solve light了,因为我们后边要讲的一个spring VC呢,它本身封装的就是solve light,所以说我们就不需要再创建solve let了啊好,那所以说以后咱们的控制层咱们就叫做什么什么controller OK吧,好,那下面呢,那咱们就把咱们的这个三层架构呢,给它创建出来,咱们先把这些东西呢都给它关掉。
02:19
好,大家注意,在这呢,咱们去创建一个控制层啊,叫做con controller,然后点,比如说咱们就模拟一个叫做user control。好,那我们创建完之后,咱们再来创建咱们的service啊,然后首先咱们先创建service的接口层,叫做user。好,那这个该如何去命名,大家应该都知道对吧?然后咱们命名的规则就是啊,接口就叫什么什么service,然后实现类的话,然后我们在后边给它加上一个iml,然后把它放在咱们的I'm PL这个包下面啊,User service IM PL,好,然后咱们让他去实现。
03:05
来,S,让他去实现user service接口。好,那下面呢,我们再来创建咱们的DAO层,然后在这的话,咱们是dao.u.DAO好。好,这应该是一个接口啊,好,那我们创建完之后,咱们再来创建DA的一个实现类是IMPL.user DA I ML。行,那我们首先呢,咱们先通过我们学过的spring的一些知识呢,然后咱们先处理一下它们之间的依赖关系,对吧,然后我们当前咱们的controller里面,我们是不是应该来创建一个service的对象。好,那我们之前咱们是怎么写的,咱们在这儿是不是需要来创建一个user service user service,然后等于另一个user service m PL。啊,大家注意,咱们是这样去写的,但是咱们说了这是属于硬编码,是我们把它给写死了,然后呢,所以说如果我们之后咱们的user service这个接口,它有一个新的实现,因为我们以后咱们的功能不会是一成不变的,然后我们当前所写的这个实现类呢,如果说我们以后要进行更新,进行维护,那所以说大家想想,我们一般很少会在原有的代码上去改,我们一般都是会去扩展一个新的实现类,那当前我们是把它给写死的,如果说我们以后有了新的实现类之后,那大家说这个时候我们怎么办?
04:33
那我们是不是就需要去咱们的源代码里面去改,改完之后我们需要重新去编译,重新去打包,然后我们当前咱们修改之后的一个内容才会有效果,对吧?所以说这就属于硬编码内伤,那这个时候我们怎么办?咱们可以通过那咱们学了spring的IOC之后,大家都知道IOC是用来管理对象的,用来管理对象和对象之间的依赖关系,对吧?然后呢,我们是不是就可以把咱们的user controller,然后来交给咱们的IOC容器来管理,把user service I PL和user dul,大家注意我说的是实现类,没有说接口,因为咱们的接口呢,你是不能交给IOC管理的,就像是我们去设置一个并标签,它的class一定是一个类,不能是一个接口啊。好,那我们现在把这三个组件呢,都交给IOC管理之后,那我们是不是就可以在user controller里面来设置我们当前的user service这个成员变量?
05:33
然后同时来给的设置它所对应的get跟set方法。好,然后呢,当我们把它交给咱们的IOC容器管理之后,那大家说这个时候我们是不是这个service,它就会被动的去接受我们当前IOC容器的一个注入,也就是说我们在配置文件里面,我们是不是可以通过set注入来为当前的接口进行赋值,那我们给了他一个什么样的对象,咱们给的赋值的是什么对象,那他用的是不是就应该就是什么?比如说我们之前咱们现在用的是user service m gl,那我们后面呢,如果咱们有新的实现类的话,咱们只需要在配置文件里面去改一下就行,OK吧,好啊,像咱们只要在咱们的IOC容器中,然后在property标签里面,让它所引用的这一个bin的ID,把它给修改为咱们当前新的实现类的bin的ID就可以啊好,那我们把这个设置完之后,咱们再来看咱们的service,那service里面我们是不是需要处理业务逻辑的时候,咱们需要去调用DAO,那所以咱们在这需要创建一个。
06:39
User DAO user DAO,那原来咱们写死的,现在咱们就不需要了,但是我们必须要去设置它的get跟S的方法,对吧?要么呢,你去设置一个什么呀,叫做有参构造,因为我们现在把这些类啊交给咱们的IOC容器管理之后,我们要想为这些对象中的属性赋持,那我们是两种方式,一种叫set注入,一种叫构造器注入,OK吧,好啊,行,那下面呢,我们再来看,然后咱们的user controller,然后这里面比如说咱们来写一个方法叫public VO,叫做save,叫做save user,好,那我们要来调用谁呢?咱们要来调用咱们模拟一个场景啊,要调用咱们的user service里面的什么save user方法来处理业务逻辑,那所以这个时候我们就需要在咱们的service中来创建这个方法了,对吧,比如说这个方法,它是保存用户信息,哎,也就是添加用户信息的功能,那我们再来找到它的实现。
07:39
分类,然后来对方法进行重写,CTRL加CTRL加O,然后把这个方法写一下,那我们现在处理业务逻辑的时候,咱们是不是需要来调用咱们的DA中的方法user da.c user OK,大家看,那我们之前咱们的三层架构是不就是这样的一个过程对不对?好,控制层里面来调用咱们的service处理业务逻辑,Service中来调用咱们的这个dau,然后来实现这个持久化操作,好保存用户信息,OK,行,那我们再来找到它的时现类来对方法进行重写啊好,那在这咱们直接来输出一句话就叫做保存成功就可以啊。
08:21
好,那我们现在呢,咱们要把它们之间,要把它们交给IOC容器管理,我们也要把它们之间的关系也交给IOC容器,那这个时候我们应该怎么做?大家看啊,咱们在resource下面,咱们再来创建一个spring的配置文件,比如说这个咱们就叫做spring,然后杠auto,大家注意这个auto well就是自动装配的意思,那我们现在咱们用的是叉L的方式,那咱们就叫spring-auto well杠叉L。OK,行,然后呢,在这呢,我们该怎么配置呢?比如说我们先不用自动装配,咱们先把它给配置出来,然后把它们之间的关系呢都配置正确,首先咱们是不是要把咱们的controller交给咱们的IOC容器来管理,对吧?所以说在这应该有个bin,它的class应该等于什么叫做user controller OK,好,然后我们下面咱们是不是还要把咱们的这个service也要交给LC容器,但是大家注意在这可不能写U的service接口啊,咱们已经说过很多次了,这个class里面来写的一定是一个具体的类型,OK吧,好,然后再往下,在这咱们再设置一个B,比如说class等于叫做user DA,撇行,那咱们就设置完了,那我们现在就把我们当前三层架构的这三个组件是不是就交给IOC容器管理了,但是呢,我们现在咱们需要做这个吗?不是,我们不单要把他们交给IOC。
09:53
去管理,我们还要来管理他们之间的依赖关系,就像是咱们的user controller里面,咱们来访问到了user service,那所以在这咱们是不是就需要干什么,通过咱们的set注入或者说构到期注入来为我们当前的属性进行扶持user service,那因为它是一个接口类型,也就是类类型接口,也算是一种类型嘛,对不对?好,那所以在这咱们需要用到ref,咱们来找到谁呢?啊,因为咱们没有设置ID,所以说在这它没有提示啊,比如说大家看好,咱们给它加上一个ID,比如说就叫做user service,然后这个咱们给它设置一个ID,咱们就叫做U的DA,然后这个咱们也给它一个ID叫UR controller OK,大家看,那这个时候我们要想来给它扶持,那咱们是不是只需要来找到我们IOC容器中,然后能够为它赋值的一个bin的ID来进行引用就行,大家看这个是不是就可以就可以。
10:53
直接来引用啊,对,为什么?因为这是实现类,而我们当前这个表示的是user service I PL实现类的一个对象,而我们当前咱们的这个成员变量,它是这个接口类型的,所以说我们完全可以把这个并所对应的对象赋值给咱们当前的这个成员变量,OK吧,好啊,行,然后下面呢,我们再来看,因为咱们的service里面还有DAO,那所以说我们在这是不是也要用ref来为它进行扶持,OK,这样就可以啊好,那下面呢,我们在这来创建一个测试类,叫做all to well,然后test all to well by叉ML。
11:34
BY叉ML,然后test OK,好,那下面呢,咱们就来测试一下吧,然后我们现在先不用自动装配,咱们手动去配置它们之间的关系,咱们看一下它能不能实现功能啊,好,VO的叫做test auto o to well,好,然后在这呢,咱们也是首先要来获取咱们当前的一个IOC容器,New,一个可class pass,叉l application context,好,然后把我们当前的配置文件呢,然后给它拿过来放到这儿,然后咱们通过IOC是不是就可以来获取咱们当前的这一个变对象了,对不对,那我们来获取谁呢?大家说。
12:16
啊,我们现在咱们是不是要来获取的是我们的user controller,因为我们当前咱们的关系呢,是来完成一个完整的功能,那我们访问的入口是不是应该就是咱们的user controller,对不对?所以说我在这呢,直接user controller,然后点class,然后通过类型直接获取咱们的user controller对象,当然这个user controller以后,它肯定不是我们自己来访问的,大家注意,就像是咱们学习了VC之后,这个控制层呢,它是由我们spring mec所封装的一个solve,然后来统一访问的,但是咱们现在呢,是模拟,所以说咱们就自己获取user controller,咱们来手动去调用它的方法啊,好,User controller点叫做什么叫做c user control点。
13:07
哎,User controller对吧?然后咱们来看一下这里面的方法叫做save user啊应该刚才是在下面的啊,没看到,好下面呢,我们在这咱们来一个执行,大家来看啊,应该是没有任何问题的,对不对,然后我们是通过咱们的IOC容器来管理B,然后以及我们的依赖注入,然后来为我们各个对象中的属性来进行了复制,OK吧,好,那我们现在咱们的环境就已经模拟成功了,然后下面呢,我们就来看一下,咱们具体来看一下这个自动装配该如何来实现啊。
我来说两句