00:01
各位同学,刚才呢,我们讲到了loc的底层原理,包括里边两个重要的接口,然后这个原理部分我们就说完了,原理说完之后呢,下面咱就开始讲解loc中的具体操作了,其实这个操作呢,咱们刚才在入门案例中已经做了一个基本过程,那下面我把这操作给大家来详细演示,里边的具体内容我在这个位置写一下。IOC的具体的操作,然后IOC操作中的一个术语描述,它叫做B管理操作,所以我首先给大家先介绍一下什么叫并管理,然后咱通过不同的例子把里边效果给各位都演出来,那咱来看一下,首先第一个就是什么是并管理。先介绍这个概念,我这里强调,其实并管理呢,是在里边一种比较官方的说法,咱们可以通俗理解,这个词很好理解,那我来说一下什么叫并管理。
01:04
大家注意啊,比如说现在在B管理中呢,其实里边指的是两个操作,哪两操作,第一个就是由任给我们创建对象,还有第二个是由进行这个属性的一个注入,就是注入属性。那两个什么意思,咱来具体说一下,给各位举个具体例子,比如咱们看一下我们之前写的入脉里中,咱找到大家看啊,现在这里边是不是有一个类,这类是不是叫user啊,这user咱们用普通方式可以new力对象,但是现在要把这对象创建是不是由交给S进行管理,所以这就是并管理中的第一个操作,叫做创建对象,就是创建对象由瑞进行创建,包括咱们写入案例中,咱是不是通过配置文件,这过程是不是损失做到,所以这个就是B管理中的第一个操误组,各位把这知道我这里写的具体点啊。
02:04
各位写到更具一点,并管理。它指的是。两个操作,第一个操作就是咱说的创建对象。第二个操作用任。注入属性,那咱刚才说了创建对象,这好理解,先面我说一下什么叫注入属性,给大家解释,比如说现在我这个user内里边,假如咱们有个属性,我来一个private string,比如叫username,大家看是不是一个属性,那我现在想实现在我创建对象过程中,向username中给它设置一个值。那止损设置咱们有最普通方式,各位应该都知道,在里边我们可以生成它,那个就是set方法给他创建,咱是不是能做到,就是把用他的set方法,然后向里面设值,而现在这过程咱们也是交给死人做到,这过程又叫注入属性,所以并管理最终重复就是两个操作,第一个创建对象,第二个向里边注入属性,当然这个属性可以是普通字符串类型或者基本数据类型,另外也可以是个对象。
03:21
这个啊,就叫做并管理,各位把这先知道,就是咱们指的创建对象和助属性,这过程就叫并管理,这是他说的比较官方点,这是第一个概念,然后说完之后咱再说第二部分给大家说明。就是现在我们要进行这个B管理的这个操作,在过程中咱们大体上有这么两种实现方式,就是两种方式可以做到哪两种方式写一下,首先第一种方式,它就是基于这个XL配置文件方式。
04:01
进行实现,这是第一种,另外还有第二种方式要基于注解方式进行实现,这个是我们提到的,这咱一会儿这给大家演示配置文件方式,创建对象注属性,然后再演示这个注解方式,创建对象和注属性,这个啊是咱说的基本概念,就关于这个并管理。咱们先讲配置文件方式,这个该怎么做到,我写一下这是这个概念,所以咱们现在把这个并管理这个概念给大家做个说明,然后说完之后咱们下面看一下具体操作,首先我们看第一个操作就是基于这个。叉买配置文件方式做这个并管理,包括用它创建对象以及注入属性。给各位啊来演示一下,首先第一个就是基于叉方式创建。
05:02
对象。然后第二个就是基于叉L方式注入属性,咱们先说创建对象,创建对象过程呢,咱们刚才应该都演示过了,那怎么做呢?看一下我们入案例中写这个文件,大家看到做法很简单,咱就是加这个配置可不可以做到,这就是叉L配置的方式。我把这个啊给各位截过来,是咱们刚才写到的,然后这种方式刚才我们都演示过了,我在下面给大家具体写一下。我们的做法就是呢,在这个spring的配置文件中使用这个叫B标签。并标签,然后标签里边添加上对应的属性。它就可以实现这个对象的一个创建,这就是它的实验方式,咱刚才做过了,然后在一起的过程中,大家都可以发现B这个标签中是不是有属性了,那我下面呢,把里边几个主要的属性给大家来做一个详细解释,咱们看它的特点是怎么样的,给各位来说明一下啊。
06:22
就是它里边的属性。我想这位置第二部分在这个B。标签里边有很多的属性,咱们下面来介绍里面一些,就是最常用的一些属性。给各位啊,来做一个说明,那我们来具体看一下哈。首先大家看啊,在并标签中呢,咱们在刚才用过的第一个属性,这个属性是不是叫ID啊,那里边第一个就是。ID属性我先列出来,然后咱们解释,另外里边呢,还有第二个属性,来看第二个属性啊,大家看到这个属性。
07:01
它叫什么,就这个class属性。这是两个很重要的属性啊,把这个给各位做一个说明,然后两个属性它们分别都是什么意思,给各位来具体解释一下,这两个属性,第一个叫ID属性。我强调啊,ID属性指的并不是指你创建对象的名字,它就表示给你这个就是对象取一个标识,或者说给他起个别名,然后咱通过这个名字能得到你对象,包括各位看我用的时候是不是get b user,这user跟他名字对上,如果你这位写A,那我这里边也写A,它就表示你获取对象中那个叫唯一的一个。标识。这是它的第一个属性叫ID属性,然后还有一个叫class属性,Class中写什么呢?就写你要创建那个类。
08:01
就创建对象所在那个类的一个全路径。什么叫全路径?就是它的包和类的一个路径,比如说你看我们写这个com.at硅谷四分五,然后user就是它的包,再加上类的名字,这是两个最主要的属性,一个是ID,一个是这个class,各位把这两个给他,要记住是咱们用的比较多的两个属性,一个ID,一个叫class。外呢,除了ID和卡之外,在里边呢,还有几个属性给各位也说明一下,咱看一下啊,首先里边还有这么一个属性叫name属性,这个各位做个了解,因为咱现在这用的不多,但是他可以使用,我强调一下啊,各位给他了解一下,就是name属性的作用跟ID是一样的,就是ID的位置,你也可以加name,不用ID也可以做到这效果,而它们区别是什么呢?
09:00
ID使用之中不能加特殊符号,但是name中可以加一些特殊符号,比如说我现在加个斜杠是可以的,而name属性其实是一个比较早期的这么一个属性。在早期呢,当时有个框架,不知各位同学是否听过啊,叫RU1,它是为这个框架提供的,但是现在这个框架基本上没人去用的,所以这个属性目前用的几率很小,咱都用ID属性,这各位了解一下啊,所以这是关于B标签中两个这样的属性,另外里边呢,还有两个属性啊,当然就还有一个属性,然后后面再具体说,现在我们先知道里边有这么一个基本属性,就是ID和class,用它咱们可以实现这么一个。对象的创建。这个我们就说到了啊,然后说完之后我们再说第三部分就是现在呢,如果说你这么做的话,就是他在创建对象的时候,它会怎么样,它默认的也是。
10:03
去执行里边那个无参数的构造方法,比如说咱们之前大家都知道一个类里边的默认是不是有一个公共的无参的构造,所以他会只用这个方法把对象创建,而此文里边默认也会找到这个方法,然后把这对象创建,这是它一个特点,那这个效果给各位来演示一下啊,比如现在呢,我在这里边啊,我就生成一下它那个有参的构造。咱把有参数构造生成下。然后各位看你看啊,我现在是不是有一个有参数构造,当你写完有参数构造,无参构造,如果你不声明问是不是就没了,那我现在你看我加了有仓构造没有无仓构造,我把这个方法我们现在再给他执行一下,再看它会有什么特点。各位来看啊,这里边咱们清楚的看到是不是就报错了,那他报什么错,是不是说没有如此这个方法,就是你现在没有那个无仓构造,所以它就不能把那个对象创建,它会默认找到无仓构造进行创建,这个特点各位给他知道,他创建对象的时候,默认也是去执行无参的构造方法,然后。
11:21
完成对象的这么一个创建,所以这个啊,我们做了一个说明,就是关于这个基于叉买lo方式创建对象,这个咱们说的第一部分应该咱们入案例中都写到了,这也比较简单,包括一会儿给大家也会介绍注解方式怎么做到。这个啊,我们的第一部分,然后这个做完之后呢,下面给大家再来介绍一下,我们怎么基于叉lo方式来注入属性这个啊,我们最后说明,那注入属性这个怎么来做,给各位强调啊,首先还是说概念,这概念是什么呢?就是这个概念啊,在LC里边有这么一个概念,它叫做。
12:06
Di有一个描述,那Di叫什么呢?它翻译过来就叫做依赖注入。什么叫依赖注入呢?也就是我们通俗说的就是注入属性。这个叫Di,但是我强调啊,这两个概念在面试中别人经常问到说这OC跟这个Di什么区别,你这么来描述Di呢?是IOC中一种具体实现,它就表示依赖注入或者说注入属性,但这个注入属性它需要在创建对象的基础之上进行完成,咱们马上做个演示,首先知道有这么一个概念,那注入属性我们该怎么去注入呢?给各位来说一下啊,但是这种方式有很多,咱现在就说sven里边它怎么实现,就注入方式给各位,我先写一个原始的写法,然后再用做这个操作。
13:04
那这个啊,我先来写一下。这个我先助调,咱为了明显我现在在里边呢,我们就重新创建一个类,然后咱们专门演示这过程啊,那我重新来一个类,假如这个类我起个名字就叫这个。不考这么一类。把它创建,然后创建之后我们看啊,在这个book里边呢,现在我给他写上这么。两个属性,比如说先写一个啊,咱就为了演示这个效果,假如这book string,我叫这个就是b name就是。这个图书的名字,然后这个写完之后,比如现在我想做个操作,想要向这个b name中设置它的属性值,那怎么做呢?这个方式多种方式,我觉得各位应该能想到一种方式,一种比较原始的方式。咱这个属性是不是有它的get set方法呀,咱现在直接生成它的set方法是不是可以了,那我现在生成一下就这个b name的在方法,然后生成之后,比如下面我这边写一个问方法。
14:18
然后在问方法中,我们调这塞的方法往里面设值是不是可以了,那它的原始做法就是我们现在谬这么一个不可的。这么一个B项,然后调用book里边的set b name方法向里边设置一个值,然后这样的话,你这个b name中是不是有它这个使用值,所以这是我们原始方式,咱肯定是这么来做的。这个位应该很清晰啊,我就不把这个记到课件中了,咱看一下就是第一种方式很简单,咱直接在里边通过set方法往里边设置就可以了,这是第一种方式。我写一下啊。
15:00
第一种。注入的方式,我们就是使用set方法进行注入,这各位知道,另外这里边还有第二种。注入方式,那各位同学跟我想一下,你说现在还有什么方式可以往使用中注入,还可以怎么做到set肯定可以做到,这肯定没有错啊,这叫set方法注入,然后还有什么方式?给大家强调啊,就咱刚才写到过,我这个类是不是有它的有参和无参构造,比如现在我生成它这个有参构造,用这种方式是不是也能注入,就是通过这个有参数的构造注入,那这里边如果咱写有参构造,那该怎么写呢?我写一下,比如现在我new一个。不考这么一个对象。Book,然后我在new这个book的时候,注意我向这里边设置它那个就是b name值是不可以了,这是不是通过有参构到注入,所以这时我们在此文中可以用这两种方式进行这么一个使用注入,一个叫set方法注入,一个叫有参构造注入啊,但是我们其实在实际中可能还有其他方式,但是此文里边它知识是这么两种方式,一个是set方法注入,一个是有参构造注入,各位把两种方式给他知道。
16:29
这个啊,我们介绍的两种方式,然后方式介绍之后,下面咱们看在此中这个配置到底该怎么进行配置,然后完成这个过程,那咱们下面做一个具体配置,我把这个笔记写完,第一种是使用set方法注入,第二种是使用有参数的构造。进行注重。这个啊,两种基本方式咱们就介绍完了,然后介绍之后,下面咱们来演示一下这个具体效果,首先我们先演示用set方法进行注入啊,把这个做法给各位详细说一下,那咱看怎么做啊。
17:10
比如现在我就用这个book这个类,我把这个先去掉。然后在里边为了明显,我加个注释。这里边我们就是演示使用set方法。然后进行属性的这么一个注入,或者注入属性,那咱们看怎么做啊,首先里边的第一部分,咱们就是在我的那里边肯定要创建这么一个属性,并且创建这个属性对应的这个set方法,这肯定要做到,那为了明显我在里边,比如现在呢,我就写两个属性。因为它里面支持多个,比方说写一个你以为只能写一个,我写两个,你以为只能写两个,不是这样的,我只是演示例子,这里边写多个都是可以的。
18:04
那我现在我来一个string,比如叫这个有一个名称啊,另外还有一个,比如咱写个作者。这个叫B。Author作者,然后咱们把这两个属性的set方法都给它生出来。一个是be name,一个是be also,这个啊,是我们写的两个。就是基本的属性和它的利用方法,这是我们做的第一步,给各位小D位置啊。我小这位置就是基于叉L方式注入属性,然后里边我们有就是第一种方式。用set注入,然后第二种方式用这个有参构造注入,咱刚才做的是用set注入,那怎么做?首先里边的第一部分咱就创建一个类,然后里边我们就是定义它的属性和对应的set方法,把这个做到,这是我们的第一部分。
19:07
各位把这知道,然后我现在把这个。代码咱们复制到我们的笔中来一段很简单代码。基本属性,还有它对应的。Set方法咱们就拿过来了,第一步,然后这个做到之后,下面我们做第二部分,第二步怎么做呢?给大家强调啊,因为咱们刚才写过那个闷方法。在main方法中呢,如果你做的话,第一部分咱是不是要创建这个book的这么一个对象,就是你要new这个对象,然后new完对象之后再调里边的set方法,往里边设置值是不可以了,所以咱配置文件中写的话,也是写这个过程,先创业对象,然后调set这个方法,这是值,那怎么做我写一下哈,就是第二部分我们在这个。
20:01
配置文件中先配置它那个对象的创建,然后再配置属性的这么一个注入,所以咱下面过程都去在配置文件中进行完成,那怎么做给各位来写一下啊,咱来到配置文件中。为了明显这个我先注掉啊,不住掉也可以啊,咱为了明显就是往下来写,第一个就是创建对象。用这个创建对象,然后下一个就是注入属性,注入属性中呢,咱首先做的事情就是使用这个set方法注入属性。这是我们演示了啊,第一个创建对象,第二个set注属性,然后在里边我把这个给各位写一下啊,那属性怎么做,第一部分咱肯定要先创建它的对象,就你写一个。咱刚才写过BID,再来一个叫class。
21:02
ID中给它起个名字,比如现在我这个位置给它起个名字,假如这个名字我们就叫这个book class里边加上它那个包类路径at硅谷SPRING5点上这个book,在这步就可以做一个对象创建,然后创建对象之后在里边注属性。大家注意啊,你看我们的原始代码,咱们创建对象之后,通过对象是不是比方法注入属性,所以单注入属性要写到你的B标签里边做这操作,那里边怎么做,咱们注意这个做法啊,我这里写个注释。它的做法就是我们在B标签里边使用一个标签,这个标签叫做property。用它完成属性的注入啊,注意这个标签要使用在B标签里边,那我写一下property。
22:03
然后在property里边,我们有还是两个属性,第一个叫name,一个叫value,那这两什么意思?我觉得各位同学应该能想到了,第一个name是什么?就是你的属性名称,比如说名称叫be name叫be,那比如说我们先注入be name,你把be name写过来,这就是你的什么名称,然后Y就是你要注入的那个纸,假如这个图书名称咱随便来本书,就这个比这个易经经。啊,随便写一个啊E。易经经啊,这个就完成一个注入,然后在里边我把这个注释写详细点,里边的name属性就表示你类里边的属性的名称。Y6属性表示你要向属性里边注入的那个值,这样的话就完成了B内部的注入,就这么来做,那这写完之后,我邀各位同学再要会举一反一,不邀你会举一反三,你会举一反一足够了,你看啊B内怎么写,那我问各位。
23:13
标测怎么写?这怎么写,应该很简单,你把这个再复制一份,把你的属性名字和值改一下是不是可以了,这第二个叫B。拿过来就是你的作者,然后这里边我们写一个值,比如这个经,经应该是那个。达摩老祖写的。这样的话啊,咱们就完成了这么一个注入,所以它在配置文件中就这么来做。我把这个配置给各位截过来,我们来仔细看一下啊,做法很简单,第一个bin标签创建对象,然后在bin标里边用property里边有属性名字,包括你的属性值,就可以完成这么一个注入,这样的话咱们把这个就写出来了,这是我们的配置文件中的做法,各位把这给他知道啊。
24:05
然后这个做到之后,咱下面来写一个测试代码,把这个咱给他做一个测试啊,咱测试一下啊。就是现在来到这里边,我还是写上这么一个。结构啊,咱写下边啊,要复制一下,比如说这个叫text的BOOK1。在这个位置,按照我们的特点啊,首先加载配置文件,咱换这个application啊,当然这个b fe一样的,里边是这个B1叉L,然后这个做到之后,为了明显我在里边呢,咱们就专门写一个方法,为了一会儿能进行调用啊,就看一下它那值,所这个方法我们就叫这个。就叫这个,呃,Test这个book或者test DEMO啊,随便来一个值。DEMO,然后在里边呢,我就把这个。
25:00
B name,还有这个b also做个输出啊,为了区分加一些特殊符号b also,然后咱一会儿创建对象之后调这个方法,它里边会帮你入值做个输出啊,这是我们写的一个为了测试用的啊,然后这个做完之后再来到里边第一步第二点配置文件不用说了,第二步。是不是要得到这个对象,你得到对象之后才能做这个过程,那这对象名字我们就改一下啊,咱就直接复制了不可这个叫。不可点class,然后它的这个。对象名字我们叫book。这book得到之后,下面咱们同样把book对象先输出,然后调用book里面这方法叫test的DEMO,因为在test DEMO中咱们有那个属性的一个输出,所以各位注意,过程就这么来做,比如说我们加载配置文件,这个过程中会完成那个对象创建,包括里面这个注入,然后咱们直接得到对象,再叫方法,那这里边会把我们注入的值做输出,就咱们刚才的两值,一个易经经一个大导组,这样的话就可以完成。
26:11
然后最后把这个方法咱们来测试一下,看一下最终结果。大家看啊,两个值是不是输出了,所以就证明咱们在创建对象过程中就完成这个属性的注入,这个我们就做到了,所以这是关于我们用set方法进行属性的注入。这个各位要知道,然后这个说完之后呢,咱们回过头来再来看下,这个概念叫Di,刚才提到依赖注入就注入属性,而你要记住你注入属性要在创建对象的基础之上完成,就是你要先创建对象,然后再注入属性,比如咱们看这过程中,我们肯定是先new这个book对象,然后调塞的方法进行完成,所以这是关于用。基于叉L方式的bin管理中的用set方法进行属性的注入,咱们把这个过程就完成了,各位把这配置牢牢记住,很简单,B标签加标签加上属性加你的值就能够。
27:16
完成这么一个过程。
我来说两句