00:00
我们再来看其他注解的使用。对象已经创建了,下面呢来做赋值,首先看第一个叫做XV6,这个呢是给简单类型的属性赋值的。他这么用,我们首先来一个新的包package ba02,把student类拷贝到零二中一份。打开之后,我们把上面这个注释啊,不用的给它删掉,这些呢也都不要了,它比较长啊,都不要了。现在要做的是,我们给这两个简单类型赋值。我们现在是简单类型的属性赋值用的这个注解呢,是叫做艾v at value,这是个注解。这个注解呢,首先说它有属性,属性叫做V流,这个V流呢,它是一个死钝类型的,死转类型的,它是表示简单类型的属相直的。
01:17
At value注解它的使用的位置,第一个在属性定义的上面,无需set方法啊,无需set方法推荐使用,有多数都是这么用的,在使用之上直接呢来进行一个注解,At value赋值推荐就这么用。这么用最多最方便,而且无需set方法,第二种方式是在set方法的上面啊,这两种形式都可以用。我们用第一种方式在使用之上。
02:02
我们在provide name属性定值上加上at value。里边呢,有个微流属性,这个V流什么类型的呢?我们来看它是一个string类型的,所以所有值必须放在引号之中啊引号之中。打一个引号,学生姓名,那我们说叫张叫张飞啊,年龄一样,艾特V指定属性V0,发到引号里边29,好,那现在张飞付给 name29就付给了age。无需set的方法,那在成语中我们把这两个set方法的内容都注释喽,没有set的方法啊,在属性上复值的时候用是反射不需要加的方法就能赋值了。
03:01
测试类呢,再来一个。零二好,我们执行的配置文件是OB contest,那这个文件它要想能正确的访问零二包中的类,那么你需要做的是扫描是零二包。这改一下就OK了,其他都不用动啊。回到测试内。先把包名改一下零二。再来看一下这个student,它有没有值呢?肯定有好,我们来看。张飞,29,没问题,对象创建成功,属性也正确赋值了,不需要S方法。这种用法规则呢,它比较的简单易行,比较方便,这是我们在项目开发中常用的方式。因为这个微流属性中。
04:00
就是说这个外属性只能这么一个,它可以省略,所以简单的就是这么写。这么写就行了,这是最简单的,也是我们最常用的语法格式,把value给使用值就可以了,这是放在属性定义之上,当然也可以放在S方法上,如果你有S的方法,你也可以这么用。比方说把这个29挪到这个set a上。年龄呢,我们写一个30。在的方法中,打印一个输出,打印一个输出。H现在我们看一下,那此时它是放在S的方法上,那么它就会调用这个S的方法来做赋值行为了,我们再来看一下执行的效果。嗯。看结果。首先,无仓构造创建对象。
05:01
调用C的方法完成属性赋值,得到年龄是30姓名的张飞。这是放在set方法之上来使用的啊,放在set方法之上。在这。这种方式用的很少啊,很少,一般都不这么用,一般都是放在属性之上直接定义。我们在使用这个注解开发时啊,一定要注意一点,你这个包名。千万别写错了,如果你写错的话。如果它错了,你这个包这个类就找不到,如果找不到的话,也就找不到这个注解,它找不到。找不到注解,就不会创建对象,也不会赋值,假如说现在这个帮名啊,我写错了,我写了一个零三,这写错了,它是一个文本字符串,对项目来说看不出错了。但是你执行肯定有问题。
06:02
现在我要获取my student,那如果现在执行,大家看会发生什么错误,看错误信息啊,看这。主要就这句话。看着啊,说没有如此的B定义异常,没有哪个B呢?没有my student,那为什么说没有一个叫做my student这个名称的对象呢?那就因为我们扫描这个包叫BA03。好在这很显然项目中没这个包,那你想没这个包的话,也就意味着你这个扫描器什么都没干。什么都没干,那对象就没有创建,你没有创建就意味着在什么容器中没有死丢单的,那你没有的话,你怎么能够获取到呢,他没有。没有这个对象,那你当然就拿不到,所以他就出错了,所以这呢,千万千万别写错了。
07:08
在配置文件中,这扫描是包的路径,别写错了,写错的话你的对象是找不到的,现在是零二正确的,然后我们来执行一下。那这时候我们看呢,这是没问题的,正确。好,现在包是正确的,那如果说我在这个student类上面这个component我忘写了。就这样,我忘写了,那此时会发生什么问题呢?如果再进行程序,会发生什么呢?暂停程序。再走一个,他依然会是错误。好,我们看错误,依然是说没有一个病叫my student,在容器中没有这个对象。
08:01
为什么没有?因为你在类的上面你没加注解,没加注解那就意味着你的论不会创建该类的对象。因为我们这个注解。Component component,啊,写下这个,Component my student。你加他之后,这个注解才能创建对象,那当你不加的时候。这个对象当然没创建的,所以也找不到,所以这里要注意啊,我们这个component,它代表的是创建对象的注解,得有这个注解啊,然后你的扫描器。这个包还不能写错了,这样呢,你才能够找到这个对象,对象是放在的。容器之中,这个容器在什么内部?它维护的是一个脉。
09:02
啊,是个麦。那我一直说是M,你怎么能知道它一定是呢?实际上呢,你可以去看一下源代码,这个呢,我接下来给大家看源代码这一部分大家不用掌握啊,你就看一眼就行了,你就知道最终结果是个map就行。我们去看看这个get b。这不是从容器中拿对象吗?我们看他从哪拿的,我们点击get b这个呢,有很多方法,我们看到一个实现吧,点这个。我们看哪个呢?看这个就行。键之后呢,它这块有个叫做do get b,我们再接着看这个方法的内部实现,按照CTRL键用鼠标点那个方法名进来了。这个方法呢,它返回这个泛型对象T。然后我们看有临时变量叫out b。Bin呢,在这有个赋值语句,给它赋值bin啊,再往下看,Bin的赋值呢有好多再往下。
10:06
往下看,这也是一个给并数值吧。然后再往后这儿也是给并赋值,那这个B跟我们这个发有什么关系呢?你最后往后看。往后往后大家看这是不是有个B呢。那说这个病。它就是我们最后能得到这个对象,那这个B看它赋值语句吧,我们找最上面的找一个就行,找它赋值语句。呃,比如说就这个吧,看它。那么按照CTRL点这个方法,看它里边怎么获取对象的呢,点进去。它里边呢,是这样的,它反正是一个object乘以往下走,我们看啊,这是一个代码,Return being intense。然后再往下returnence,再往下,我们看这是不是有个object。这是个复词语句啊,再往下看来看,这是不是一个return object,也就说这个分支中它是会让你返回这object。
11:08
那这是怎么获取值的呢?再往里看。你看这有个赋值语卷,这是不是还有一个赋值语句啊,那我们找一个吧,比如上面这个。你看在这块最终是这样, return this the fight being ofk.get.get你看啊,前面这肯定是个对象。然后是一个get,这是一个方法的名字,Get。那我们什么样的?对象中或什么类型中有这样的get方法呢?我们最常见的是麦。Map获取值不就是get吗?那前面这个对象是卖吗。它是map吗?看一下按照CTRL点击这个对象,我们往上看,这是不是一个map?它呢是一个。
12:02
这是一个map,这个map呢,是能够实现这种这种就是一种分布式的这种操作中用到的一种map,或者说这种map呢。诶,它是一个性能好的,又是线程安全的一种map啊。然后它这个map类型啊,你看map吧,那既然我们拿对象是从这个map中拿的。那你从这拿是不是也得往里放啊,所以我们说呢,论中我们认为它创建对象就是放到这个map里边去了。然后呢,我们从这个map中再拿我们的对象,所以呢,你可以认为在spring中存这个对象在做这个map集合啊map集合。那这个string。肯定就是我们的K呀,K就是我们map的那个,就是对象的那个ID。那这个object就是我们那个对象呗,所以我们才说呢,你在配置文件中声明那个bin对象的ID就是这个K,就是它啊,就是它。
13:04
好,这个大家看一下里边就行了,总之呢,我们就是说从map中拿对象,在此论中维护了一个map来存放着配置文件中的每一个对象,这就行了。知道结论就可以。这个map。
我来说两句