00:00
今天呢,我们讲的内容呢,有以下这些,首先我们可能要讲的是这部分啊。引用类型的自动注入和配置文件的多个的使用。之后要来讲的是注解,上午呢,估计应该能把这些都讲完,下午应该能够。先讲一下LP的基本概念,今天呢,就这些内容应该能讲到大概到这左右吧,今天到这啊差不多。先来看引用类型的自动注入,自动注入啊,这什么意思呢?我们以往呢,在讲配置文件中给属性赋值时,那我们需要做的是在这个配置文件中啊。得把你要用到的属性值一个一个都付出来。那你看,Student your name your age,你需要赋值,School需要赋值。你的每个属性你都需要赋值,不管是简单类型的还是引用类型的,你必须手工赋值,你不赋值呢,它就没有,而我们在项目开发中呢,这种引用类型。
01:12
在一个类中可能会有,很可能会有很多,如果你都是这样去赋值的话,它会有大量的这样的冗余的赋值的语句。那呢,他也遇到这个问题了,所以呢,他把这样的复制语状给你简化了,也就是说如果你的成语中有好多个类似于school,那你可能有这样的代码就很长了,哎,都是这样的代码。那这样的话,这个代码你看又臭又长的对不对,冗余很多,而且呢,这个代码的写法也没有什么太多技术含量,只不过是些重复工作,那这些的工作既然用到框架了。就应该能把它简化,那现在我们来看一下怎么能够简化对于引用类型的这样的赋值呢?这个叫做自动注入啊,自动注入我们这块啊,再来个新的包给他演示一下自动注入。
02:13
先找我们类部分,我们这儿呢,还是新建一个包包呢,叫BA04,我们把零二中的这两个类呢,给它拷贝到零四中一份,不到零四里边。打开零四。首先student中有name age和school。对应的呢,我们这有set name to the age set school,好,这是兔子的方法,没问题。配置文件呢,我们也来一份,是零四。打开之后。我们把这里边儿的这些注释什么的都删一删吧,他现在呢,不需要了。啊,打开之后这块三库呢,也不需要。
03:02
改一下我们的班名是零四,这呢也是零四啊啊,李四26岁,学校呢是北京大学,现在我们测试一下代码。让这个程序呢,能够正常的运转起来。找到我们测试。把这个测试类呢也复制一份。嗯,零四锂电。啊,我们这儿首先来指定零四包啊048。下面这些都没有了。拿的是死丢单对象。来直接我们测试代码,这句话不要了啊,上面导入的应该是零四中的student。执行测试方法零一。我们看结果中这些呢,是死丢的内中执行的方法,这最终输出的是李四26岁,然后是北京大学没问题,对象创建,属性复制成功。
04:13
那为了避免这个输出啊,太多影响我们的结果呢,我们把这些没必要的输出呢,给大家注释了啊。打开student。把我们这些什么set name呀,Set这些都干掉,包括go造话输出也都不要了,好再把测试呢跑一下。我们看目前的输出结果呢,应该是有一个set school。还有一个是呢,对象的输出内容,这就行了。我现在来改这个配置文件,我把呢引用类型的赋值语句给它注释了。这注释了啊,大家想如果注释的话,那我们这个引用类型的赋值是不是就没有了,那没有的话,你现在再来获取这个死丢的,并输出它引用类型肯定没有值。
05:08
你没负它,哪有值啊?他呢?你不赋值它就没有,那现在我们要改变这种状况,我们要用的是一个叫自动注入。我们在这来写这个概念啊,好,它叫做引用类型的自动注入,好这个是说呢,这个框架它根据某些规则可以给引用类型赋值。我们管这个呢,叫做自动注入。它只针对引用类型的赋值是有效的。其他类型他做不了,只能对引用类型来赋值。简单类型,你像内你必须手工赋值,它用不了这个自动注入,它只对引用类型有效,也说这个school是可以用的。
06:10
它根据某些规则来完成引用类型的赋值。是不?他来给你赋值,不用你手工再写了,这叫做自动注入啊。你说不用你再赋值,再给引用类型赋值了。它的规则呢,有两个最常用啊,使用的规则呢,常用的是一个是by name,一个是by type,这两个呢是最常用最常用的。现在来介绍这两种规则,首先说第一个叫做by name,它翻译过来呢,叫按名称组。
07:03
按名称输入,它的解释是这样的,那就是说呢,我们Java类中。这我类中啊,引用类型的属性名和死不认容器中,这个容器呢,你可以看到就是一个配置文件呢,容器中。这个病的ID名称一样。这个ID的名称一样啊。它的名称一样。然后去数据类型是一致的。这样的容器中的B润。
08:02
能够赋值给引用类型,能够赋值给引用类型。By name也是名字,是说你Java类中引用类型的属性名和BID这个名称是一样的,这类型也是一致的。那么这样的这个病就能付给这个引用类型了。这叫做by name自动注入。如果你用了by name之后呢,Spring会把你这个类中所有引用类型都按照by name规则完成一个赋值,它找的是名称一样的,因为属性名是名字变ID就是对象的名字嘛,找名字一样的。语法规则,它是这样的语法啊。
09:03
我们声明一个B,有ID,有class,后面有个属性叫做outwa。等于by name里边是简单类型属性赋值,那不值刚定好这就行了。那现在。我们用掉的。Student和这个school呢?来给大家演示一下my name。我现在实现的是by name,那我们就在B的声明也是后面这加上一个outwa等于by name就OK了。那么这么做的意思就是说,我们要给student类中所有引用类型按照by name规则让来完成赋值。
10:06
我把这个大学呢,换一个换一个清华大学好,那我们看一下最终结果中这个故它能不能把这个值附上呢。能不能呢?我现在来测一下啊,现在结果应该是附不上。我们看此时是不是一个空啊,在这儿呢,空那。那怎么能附上呢?我们要求是什么样啊,是说。你累属性。和这个B的ID是不是得一样啊,那我们看词内中这个名字是不是叫school,因为它是引用类型吗?属性名叫school,拿过来CTRLC。和容器中找B的ID吧。首先你是不是得找死固类型的吧,死固类型的把它改成呢死库这样就行了,这不就是属性名和变成ID名字一样吗?类型是也是一样的呀,这样就能复制成功了。
11:12
来看一下结果。好,我们来看下守库。调用了吧,帮你调用的,然后看复试结果,清华大学没问题。这就是引用类型by name的方式,那他怎么做的呢?程序代码从上往下执行,当创建容器时,它就读这个配置文件呢?读配置文件代码从上往下走,当走到这一行的时候。它会调用无仓构造作案对象。给简单类型赋值,当时一看是by name,那就知道了要去找死丢类中。引用类型。所有引用类型看它的属性名,这个名拿到之后和spring配置文件中每个变ID去比,跟它不一样。
12:09
不是跟他再比一下鼻子样,再看类型别的此故。我们肉眼也能看出来这个此物是可以付给他的吧,名称一样,类型也一致,所以此不是就认为这个对象是可以付给这个引用类型的,所以他就把这个清华大学的子部赋给了引用类型,所以你能看到最终结果了,你得到的是一个赋值好的。只丢单的对象。好,那么它有简单类型的赋值,引用类型自动来赋值,那它能自动帮你赋值的话,你在代码中。就不用再写是不是这样的语句了,减轻你的劳动了嘛,让你的开发效率更高一些嘛。这里是by name,比的是名字。好,那我们就先休息一会儿吧,先休息一会儿。
我来说两句