00:00
各位同学,我们继续往下来看,刚才呢,我们演示了通过凹凸二完成使用注录,包括里边的各种场景我们都进行演示,那下面呢,我们再来看下一个注解,这个注解名字叫resource,通过resource注解也能完成使用注入,那下面咱们演示的注解到底该怎么去用?首先把这个注解我们先做一个介绍。这个注解强调啊,跟它不太一样,注解呢是框架中自带的一个注解,但是框架中自带的它是什么呢?是Java扩展包中一个内容,也就可以说是JDK中的一部分。它是一个标准注解,具有更好的通用性。而这个resource它默认是根据名称进行装配,如果说名称没有指定,它把属性名称进行装配,如果名称都找不到,再根据类型进行装配,就是默认根据名字进行装配,而凹拓二是默认根据类型进行装配。另外注意,凹二呢能用在属性上、方法上、构造方法上和构造方法的参数上,但是resources只能用在我们的属性上和set方法上。
01:21
然后这里提到啊数解,因为它属于JDK扩展内容,所以这个时候如果说你用的是JDK8的版本,那就不需要引入额外依赖了,里面就有如果说你用的是JDK8以下。或者说是高于GDK11的版本,就需要一种依赖,咱们目前用的是JDK17的版本,所以我需要在项目中一种依赖这个注解才可以使用,那下面我们做个引入,另外里边这个细节咱一会儿会进行具体演示,大家先有个了解,我先把依赖先给他引进去。我现在这些都关掉,我就在我的负工程里边引入这个依赖。
02:05
直接复制过来,为了能用到里面那个resource注解,然后这个引之后我们来看啊,这是它的源码中的注解,这里提到能用在属性上,能用在方法上,咱就重点在属性上用一下这个的注解,那咱们直接看效果,这个效果我们这么来做,首先咱们把基本的环境先搭建,然后咱们演示。第一部分,我先建个包。这个包我就叫resource,然后在resource里边,我就把刚才咱写的这些类给它都拿过来,把刚才凹的效果咱用resource给它再实现一遍。给他复制。大家看有一个基本环境,然后环境里边我把一些多余的先给它去掉。啊,这些先给它拿掉,这是咱们刚才的写法。
03:00
先去掉R。一会儿再来完善,这是C里边,然后这个是service里边,包括接口,包括实现类这部分给它也是先去掉。调用先注掉,另外再来到这个DAO的实现类中。找到DA。这部分啊,咱们就给它做个输出,所以现在有这么一个最基本的一个结构。这个结构呢,完成之后,下面呢,咱们开始演示注入过程,首先也是第一个在CTRL里边注入service,那我们怎么做呢?咱们在CTRL里边就加上service这个属性,然后加上之后在service使用上边加上个注解叫注意别加错啊,Resource是我们的这个注解。把这个给它加上,然后加上之后我们来说明啊,Result里边它的这个关系就是匹配过程中是这么一个过程,首先会先根据名进行匹配,如果说名称没有指定,那它用属性名称进行匹配,如果这个都找不到,再根据类型进行匹配,那咱们先根据名称进行匹配。注入那什么意思呢?我们来写一下啊,比如现在CTRL中注入service,这service里边咱们把对象已经创建出来了。
04:31
那我在里边呢,我就给它起个名字,这里边有一个Y6注解,我强调啊,大家注意一个细节,一个注解里边如果属性名字是Y6,这Y6属性名字可以不写,注意啊,只是Y6可以不写,如果你是别的属名字还需要写上我这就是Y,那我给他改个名字,比如我叫。Service啊,为了区分啊,我就叫这个买。
05:00
Us。Service咱们叫这个名字,我现在根据名字进行注入,那怎么做?Resource里边有个属性叫name name不能省略啊,Y省略,然后咱们加上名字叫my user service,它就根据名称完成了注入,这是咱们写到的,然后注入之后咱们可以调用survey中的方法进行测试,这是我们的第一种场景,根据名称进行注入,我在里边给大家加个注释,根据名称进行注入。然后这个过程为了各位看得更明确,给大家截个图来说明。我这里截个图啊,咱们先放到这个图里边,我们来详细说明一下啊。这是我们的controller。然后在里边我们要注入service service里边我是在实现类里边创建它的对象,并且指它的名字叫user service,为了咱测试,所以我故意叫这个名字。
06:07
然后在过程中我们怎么注入result里边指定你的名字,这个名字跟你定义的这个名字保持一致,这就叫做根据名称完成注入,这是咱们说的第一个场景,这个为明确,然后注入之后我们继续来写,咱们写第二个,第二个呢,我们就是根据里边这个。Service注入do,我们进行演示,那大家看啊,我现在这个在service里边,咱们注入do,那我还是加上这么一个user do user do,按照刚才的做法,咱们完全可以给他写个名字进行这个操作,但是现在为了我们更加明确,我这么来演示,咱们看它的第二个场景。看我这里写到的啊,就是如果说你根据名称用注入,那我需要指定,但是如果说你不指定怎么做它用属性名称进行匹配注入什么意思呢?强调啊,比如你看我刚才是不是指定名字,那根据名字找到经注入,我现在在sir里面注入do,这个时候呢,我就加上一个叫resource。
07:20
Resource,但是我加之后呢,我不指定它的名字是什么,我不指定,不指定怎么做,它根据属性名字进行匹配,那属性名字咱们匹配一下啊,我给它起个名字,我就叫这个。DAO啊,为了区分,我教这个买u do,那咱怎么做让属性名字跟这个保持一致,这是它的第二个特点,你不指定用属性名字进行匹配,然后匹配到之后他就能够完成注入,咱们可以调它的方法进行实现,这就是第二个特点。我写下啊,就是不指定。
08:02
你的这个名称,它就根据属性名称进行这个注入,根据它我们来做到。那这个呢,给大家我也是画个图来来说明一下,我把这个给大家也是截一下啊,咱们来到这个图里边,刚才我们是根据名称进行注入,指定名字,在里边result中用name属性指定,根据它注入,这个好理解,然后第二种情况下就是我们现在没有指定名字,那怎么做它根据属性名称进行注入,也就是我们刚才说的这个过程。我把这个借过来,咱们也是画一下,大家一定要知道它这个关系,把它这个过程。然后他怎么做的呢?就是这里提到啊,我不指定名称,根据属性名称注入,那怎么做的呢?各位看属性名称是不是叫买user DAO。然后我这个名字叫u do,根据它进行匹配,完成注入,这是我们说的第二部分,根据它来做的,这各位明确,然后这个完成之后,下面呢,咱们先做个测试,看一下目前的效果是否正确。
09:16
我们来试一下啊。把这个直接我们来执行一下,看一下结果。咱们直接执行。然后大家看里边啊,这位置呢,他报了一个错啊,咱们看他报了什么错,我们来看一下啊,说这个user CTR了,它里边啊,就是有这么一个错误,那把这错误咱给他稍微改一下啊,应该是我刚才那个注入的时候写错了,为什么报错呢?强调啊,大家注意啊,我这问题在这里,就这跟那个猪肉没啥关系啊,你看我刚才这过程中。我们的controller啊,包括这个service,包括里边的过程中,我们刚才是重新写了这么一个result代码,但是现在执行过程中,其实他还是找到里边的这个部分啊,所以咱给他还是稍微改一下啊。
10:09
我再特别重复一遍啊,它为什么报错,因为我现在呢,你看啊,咱就再看一下它的提示,他说我现在啊,这里边这个名字是userl里,在这个里发现了,然后他又在这个发了,等于说现同样这对象他给我们创建了两次user,因为当时在中有,在我这里边也有,咱怎么避免这个问题呢?强调啊,就是他给我创建两次,第一种方式你可以把名字改一下,但是改名字不方便,咱要改很多地方,然后第二种方式,咱可以把这个名字给他,这里边改个名字,比如我默认叫user controller,就是首字母小写就默认是它,而这个创建之前在al中是不是也进行创建,所以它等于说创建了两次,这个时候然后名字改一下,为了区分我都叫这个买user controller,这就可以了,它里边就成功了。
11:10
然后之后我们再改一下里,刚才改过了,再改一下do user do,然后这个也改一下。这个我叫这个买。Do。啊,为了咱们后面的测试。这些都改一下,现在就可以了,要问他提示说你重复创建了相同对象,现在就没有问题了,然后都之后我们最终执行看一下最后结果就验证一下刚才的过程,大家看最终是不是输出了controller service do啊,咱们再重复一遍刚才我们的做法啊,在CTRL里边注入service,我们的做法就是加上service的属性,把它注入。第一种方式,咱们指定名称,根据名称注入,这个指定过程中,你的名字要跟里边这个名字保持一致进行注入,然后第二个里边注入do,咱做法就是根据它进行注入,但是这里边我没有指定名字,没有指定名字它怎么做,它根据属性名字找到这个对应的关系进行注入,这是咱们刚才演示的两种场景,然后下面我在演示第三个场景,第三个怎么做呢,比如现在啊,我这里边。
12:29
既没有指定名字,也没有让属性名字保持一致,那它就会根据类型进行匹配,那咱们来试一下啊,我就在这里边试一下,就是我这位置。根据类型进行匹配,这个我先给它,咱CTRL里面注service,我这么来做,比如加上一个private user service,这个我们user service,然后在这个使用上面加上一个resource。
13:03
啊,Resource,然后大家看啊,我这么写的话,第一个每指定名字,第二个属性名字跟中的名字也不一样,那这个时候也能注入,它会根据类型进行注入,找到它对应的对象,最终完成注入,这是我们的第三种方式。或者第三种情况,然后最后我们来试一下啊,看一下结果。那我们看它最终的执行。大家看效果是不是也正确了,所以以上咱就完成了resource注解完成注入的过程,这咱们就讲到这里,然后最后啊,把这个给大家总结一下啊,就是resource注解默认根据名称注入,如果说你没有指定名字,它把属性名称作为你的名字进行注入,如果这些都没有,它才根据类型进行注入,这是我们完成这个过程,然后刚才遇到一个小问题,因为我现在都叫user controlr,这里边测试会造成你的对象创建了多次,但是它改个名字就可以了。
14:09
所以这个咱们就引到这里,比如说咱们现在啊,基于注解方式管理B,咱分别做到了怎么来创建并对象有这么四个注解,包括怎么注入属性,咱说了三个注解凹凸Y。还有里边这个resource可以进行最终的属性注入。
我来说两句