00:00
好,那接下来呢,我们就来呃说一下我们的通过注解的这种方式啊,来去配置我们的病,以及呃装配我们的这个病啊,呃,那也就意味着我们呃一开始基于这个XM的这种方式的配置呢,我们就讲的差不多了啊,剩下的话呢,我们就是教会大家如何通过注解的方式来去配置我们的病,还有我们就是病与病这样的一个装配,OK,我们来看一下呃,使用这个注解的这种方式呢,它相对于这个XL这种方式而言,对吧,就是使用注解呢,它会更加的简洁啊,就是你写起来了这个代码更加的简洁啊,就是你少了好多啊一些这个病的一些配置啊,而且和我们这个MVC这个组件化这个开发的这个理念是十分什么贴切的啊,十分贴切的,然后呢,也是我们开发中最常用的一种使用方式啊,这个大家一定要注意,是我们开发中最常用的一种使用方式,也就意味着。
01:00
从今天我们讲完这个注解以后,我们在后续的讲解过程中,几乎都是使用注解的方式,明白这个意思了吧?啊,后续其他的知识点的一些讲解,我们几乎都是使用注解的方式来去讲解的啊好,这个大家要知道OK啊,那么接下来我们要首先说的是什么呀?你要去使用注解来去配置,那么我们就得先去离了解几个常用的注解啊,大家来看这个地方呢,我给大家写出了,哎,总共有四个注解,那么我们分别来看一下每个注解的含义是什么啊,首先第一个注解叫做component,那么这个注解呢,它是一个普通的注解啊,就是一个普通注解,它标识的一个受spring LC容器管理的一个组件啊,管理的一个组件,就是通过这个component去标注的,什么意思呢?比如说现在我有一个类啊,我想交给我的这个,我有一个类,我想交给我的这个。
02:01
LC容器进行管理,那么我们只需要在这个类上面标上我的component注解,诶,它就可以交给这个LC容器进行管理了,但是从这个注解的这个名字这个角度上来考虑,如果你加的是一个component的这个组件注解,那么这个类呢,其实就是一个普通的一个组件,它没有一个特殊的含义,就是一个普通的组件能听懂这个意思吧,OK,但是呢,我们还对应的提供了什么呀,Py controller,还有我们这个service啊,Controller又提供了这三个组件,而这三个组注解呢,它就会标识一个有特殊含义的一个组件的,比如说像这个report是来标识我们持久化层的组件,像这个service,标识我们的业务逻辑层的组件,像我们的controller,标识我们的控制层的一个组件,或者叫什么表述层的一个组件,它就有一个特殊含义了,但实际上在从这个使用角度来讲,他们这几个注解是没有任何。
03:01
的区别的,比如说我现在有一个类,我想被LC容器管理,那么你标识这几个注点,哪一个都可以。听明白了吧,标注哪个铸解是都可以的,但是假如说你这个类呢,它就是有特殊含义的,比如说我这个类就是一个DAO,那么DAO呢,它就是一个持久层的一个组件,那么你最好给它标上什么P这个组解,这样的话呢,我们就可以从这个注解的角度直接能看明白,原来你这个类就是一个持久层的,逐渐就是可从这个可读性上面来讲会好一点。能明白这个意思了吧,就是从这个使用角度来讲,这四个注解没有太大的一个区别,你标注谁都是可以的,但是如果要从这个可读性上面来讲,或者说呢,从这个呃开发这个呃,建议大家这个角度啊,就是怎么去标呢?你是什么类啊,你的作用是什么?那我就去标注对应的一个组件,如果说我不确定我当前这个类它到底充当的是一个什么角色,OK,那你就去标注一个component的一个基本组件就可以了,明白这个意思了吧,能听懂了吗?OK,好,所以说呢,首先呢,给大家去解释了一下这几个,呃,常用的一个组件啊,在常用的这个注解啊,然后呢,它所标识的这个组件啊,那么可能对于大家来讲的话呢,这里面我们提到的这个持久化层,业务逻辑层,还有这个表述层。
04:27
这个概念大家可能不是很明白是吧?OK,那么接下来呢,我就来给大家去简单的去解释一下啊来吧,我们就通过一个图呢,简单的去说一下,呃,那么要解释这几个话题的话,我们首先得去给大家去说一下,有一个概念叫做什么呀,MVC这个大家知不知道MVC是个什么东西啊啊,这是一个什么设计啊,软件的一个什么设计思想啊,对不对?哎,MVC呢,其实就是我们软件的一个分层啊,怎么分的呢?就是我们的model v呢就是我们的VC呢,就是我们的。
05:08
Ctrler能明白吧,分别是啥意思呢?Model就是我们的模型,就是我们的数据,V就是我们的视图,能白吧,Ctrler就是我们的控制层啊,就是我们的控制层,那么其实像这个东西呢,它就是我们的这个经常说的什么web mvc啊,说白了MVC表达的就是他们。理解了吧,OK,但是的话呢,注意我们软件的这个具体的分成是什么样子的呢?它是这个样子的,来给大家说一下啊,我把我的整个的软件呢,我可以分成这么几层啊,哪几层呢,大家注意,就是我们刚刚提到的大体上我可以分成这么几层啊。好,那几层呢,大家注意啊,就是来第一层,这就是我们的什么呀,视图层啊,或者说呢,我们也叫什么呀?啊,就是我们刚刚在这里面看到的啊,就是叫做什么呀,哎,叫做我们的这个啊表述层或者什么控制器是吧?表述层啊表述层那么这个东西的话就特别多了啊,啊有的视图层的,有叫表述层的,有叫表现层的啊特别多了啊,我们就大概知道这个概念就行,然后呢,下一层我们叫什么呢?这个叫做业务逻辑层啊,叫做什么业务逻辑层,就是专门来去写你的这个业务的,能明白对吧?哎,业务逻辑层,而下面这一层呢,我们叫什么呀?叫做数据访问层啊,或者说呢,我们也叫做什么呀,叫做持久化,哎,叫做持久城,理解这个意思吧,好,那么这里面我们呃,拿上我具体每天写的这个代码来去给大家对照着说一下,像这个数据访问成持久城。
06:49
的话呢,说白了就是我们的DAO,能明白这个意思吧,哎,就是我们的这个DAO啊,而这个业务逻辑上呢,可能大家没有写过啊,它就是一个service,明白吧,哎,它就是一个这个service,那么这个视图层表述层呢,哎,这个东西就比较多了啊,这里面包含什么呀,制图的表示包包含什么呀,它就包含我们的MVC啊,RVC就是什么意思啊啊具体来分类话,就是应该是这么来说啊,V在最前面,然后呢C在后面,然后呢M在这。
07:28
明白吧,就是我可以怎么做呢?我可以通过我的这个数据访问层拿到我的数据,然后呢,在这个业务逻辑层里面,我首先要去处理业务,然后呢,最后拿到数据,拿到数据以后呢,把这个数据给它返回了回来,返回回来以后呢,这里面我们其中有一个CTRL的就是我们的控制层,控制层是仅仅的与我们的湿图层打交道的,能明白吧,最后的话呢,我要把我的数据呢,诶通过我们后台处理好的这个model数据模型数据,把这个数据呢,诶给我通过我的控制层做一个处理,处理完成以后呢,把这个数据呢,再返回到我的尾U里面,那么这个尾U的话呢,其实就你可以理解为就是我们的GSP啊或者HTML啊这一堆东西了,他在最后呢,帮我们做一个呈现,能明白这个概念了吧,这就是我们软件的一个大体的一个分成啊,但是一般情况下的话,对于这个前面的这个视图上表述层,我们主要说的呢,主要研究的就是其中的一个叫做什么controller,明白了吧,主要研究的就是一个controller啊,那么现在我们就能看得到。
08:29
可住了,在这几个层里面的话呢,我们就可以什么去标注对应的注解了,标注什么对应的注解呢?像这个地方我们标注就是一个CTRL了,能明白吧,标上一个CTRL,注意标识它就是一个什么控制成的,然后呢,像这个上面呢,我们标识的是一个service,好,而像这一层上面我们标注的是什么呀,我们标注的就是一个啊啊是吧,能明白吧,哎,标注就是我们这个OK,就是标注的这个主点好,这是人家死朋友帮我们提供好的,为这个每一层都提供了一个对应的一个注解,但实际上你在这个上面,每一个上面我都可以标注另外一个注结叫做什么呀,Component啊,都可以标注一个component能明白吧,就是呢,你把这。
09:29
这个注解标到这几个上面都没有任何问题,但是大家注意,如果你只标一个component的话,那我是不确定你这一个到底是啥的,但如果我标的report,那我通过这个注解我就能知道你这个肯定是持久层的组件,我标的service,你这个肯定就是一个service层的一个组件,能听明白这个意思了吧,假如说你在开发的过程中,诶,有一个类,或者说有个某个组件,你不确定它充当的是什么角色,但是呢,你也想把它交给我的LC容器管理,那么你就标上component就行了,明白这个意思了吧,OK,所以说呢,我们就呃,通过我们几个注解呢,把这个基本的一些分层啊,软件的这个分层呢,给再来给大家去什么简单的去说一说,听明白这个意思了吧,能理解了吗?OK,好,那把这个说完以后呢,接下来我们就可以啊,使用我们的这个注解来去进行我们的这个开发了,好那么我们怎么做呢?我们就围绕着我们刚刚提到过的这几层来去。
10:29
做好来,接下来我们回到开发工具中,然后呢,呃,我们在这个下面呢,我们再去写一个包啊,我们去用一个package,那么这个package的话,大家注意了啊,我们就写成艾特硅谷然support点现在我们用的是注解,我就叫做a not啊点比如说我们有一个controller,好,Controller写到这,然后呢,我们再去用一个package,我们叫什么呀?CTRL到后面就是我们的service service后面呢,我们再去用一个package,我们就是叫什么呀,叫deal,或者说你可以叫成什么呀,P能听道吧,啊,但你要理解就是同一个东西啊,这就写好了,呃,那么再来给大家去说一下,呃,我们这么分成有什么好处呢?
11:20
我把软件分成这么几层有什么好处啊,各负责各的嘛,对吧,主要就是为了什么呀?啊解耦主要就是为了解耦,那我怎么进行这个解耦操作呢?其实说白了我们就是通过什么呀,通过我们的接口来去什么解耦的,怎么通过接口接耦呢?你想一下啊,我给我的每一层的这一层就算了啊,因为你是直接跟我的视图层打交道的,说说了它就不需要有什么接口了,对吧?像我的这个业务逻辑层跟这个DAO层,你看啊,它与它,然后呢,它与它之间,我们都可以通过一个接口来进行一个结果的操作。
12:00
明白吧,比如说我定义一个service接口啊,定一个service接口,对于这个CTRL这一层来讲,它只需要有个service这个接口就行了,而我具体的这个实现类,比如说我有A实现,我有B实现,我有这个C实现,我是不需要直接告诉他的,能明白这个意思了吗?哎,我们就通过这个接口接口了,假如说你没有接口的话,那你直接把这个A实践写到这个里面了,将来如果说我想不用A了,我想用B,那你就得回到这里面去改代码,但如果你使用的是接口,你在这个里面,你直接去声明接口就可以了,具体你到底是A还是BSC,那就看我给你谁,你就用谁就行了,将来如果你想做这个时像类的一个更换,你是不需要去修改它的。这个大家能能想明白吗?可以的吧,哎,接口就可以什么帮我们做到这样的一个事儿啊,因此我们在实际开发的时候,肯定在每一层是要有接口的,那么我们现在写的话也是根据这种方式来写的,大家来注意,首先ctrller里面呢,我去用一个class,对于它来讲,我们是不需要有接口的,因为它直接跟谁啊,跟我们的视图层去打交道的啊,来user ctrl了,我就写到这了,然后呢,Service里面呢,大家注意,首先我要去有一个接口,就叫做U3SERVICE,能看明白吧?DAO里面呢,我去有一个接口,我叫什么UDA。
13:24
看明白了吗?能看懂了吧?OK,但是呢,大家注意了啊,现在的话,我们先不用加各种方法,我们就来写上一个实现类,对于这个service来讲,将来的话呢,我需要有一个实现类啊,就是user service啊,具体写一个实现类,让它呢去实现到我们的来谁啊,User service把这个接口实现一下,DAO也是一样的道理,我们去用一个class,我们叫什么呀,User DAO,比如说我叫什么呀,JDBC实现的,对吧,你DA我是不是可以通过JDBC来实现啊,啊,我们来实现啊,Port啊,Employment,我们的user DAO把它写到这,那么大家现在看,呃,对于这个DA来讲,我有一个接口,对于service来讲,我有一个接口,能看明白吧,OK,那么他们几个之间呢,注意对于CTRL的来讲,我只需要知道有一个什么呀,有一个service接口就行了,而对于我的service来讲呢?
14:24
我只需要知道有一个DAO接口就行了,具体你这个13类我是不用知道的。能听懂了吧?OK,能明白吗?这个意思可以吧?OK,一会再写的时候你就知道了哈,来,我们接着往后复写,呃,那么现在如果说我想把我的controller,把我的这个DA,把我的service都交给LC容器管理,应该怎么办呢?哎,我们需要做两件事啊,来吧,哪两件事呢?啊,你首先你得有一个什么呀,配置文件了,是不是啊,你得有个基本的配置文件,虽然说我们使用的是重点的方式来开发,但是呢,还得有一些配置是要写的,如果完全把配置去掉的话,那我们就要完全去基于注叠的方式开发了,那么那种方式的话呢,暂时我们先不用去学啊,我们还是先配合上一些配置文件,我们叫做按退设调查没,那么在这个里面我们要做哪几件事呢?大家注意,首先我们要注意一点就是什么呀,组件扫描,呃,这件事是干嘛的呢?就是你在我们的类上面加了注解了,那么你是不是得让死徒尔知道你加了这个注解啊,对不对?所以说呢,我们要配置组键扫描,组键扫描的目的是什么呢?就是扫描加了注解的类,并管理到我们的loc。
15:50
容器中,好,所以说呢,大家注意了啊,怎么开启这个主键扫描呢?我们需要导入一个contact的一个秘密空间,把它导入进来,看到没有导进来了吧,导入进来以后的话呢,我们在这个位置就可以写了,叫做contact component,通过这样的一个配置。
16:09
啊,来进行什么我们的组件扫描这个地方呢,有一个base package,解释一下base package就是一个什么,翻译过来叫做基包,基本啊就是point会扫描指定包以及子包下所有的类,将带有注解的类管理到我们的LC容器中,明白了吗?那么现在我希望他去扫哪个包啊,是不是扫我的这个这个包就行了吧,这样的话,你看这个包,这个包,这个包是都在他里面啊,所以说我们要指定的就是来CTRLC把它拿到这,你帮我去扫描no CT这个包,所以说呢,这个包以及它子包下面只要你带注解的类,那么都被管理到我的LC容体中了,好,接下来我们就来加注解啊,那么对于我这个CTRL来讲的话,我就加一个是不是T。
17:09
TRL这个注解啊,能看懂吗?诶,CTRL这个注解,而对应我的service注解接口需要加注解吗?不需要,接口是不能创建对象的,所以说你要加的是具体的实现类啊at service,好把它加到这at service,然后呢,DA呢,我们加的就是艾特,OK,这就把它加上明白了吧,那么加上注解以后呢,大家需要注意啊,我需要来给大家解释一下,你加了这个注解的作用是什么啊,就是我解释了一个,其他的你就都明白了啊好,这个注解的作用,好诸位,它就是什么呀,相当于当然了啊,你得什么配合什么呀啊,配合我们这个组件扫描了啊,就相当于什么呀,相当于在我们的配置文件中啊,相当于在XM文件中做了如。
18:09
下的配置,什么配置呢?就是一个并ID class,那么class就是这个的全类名来copy,全类名往这一放能看明白吗?OKID呢,注意它会有一个,因为你加了注解以后,相当于是不是也管理到我的LC容器中了,那么LC容器中的每一个B它都得有一个ID,那么你加注解的话,它默认的ID注意了啊,默认ID就是类名首字母小写,所以说呢,你加了这个注解,就相当于你在XL文件中做了这样的一个并的配置,那你来看一下,现在你就能明白这个注解的作用了吧,你这个写到LC容器中,你能理解什么意思吧?那么现在它就不用再去写了,直接一个注解往这一标就行了,是不是注解很简单了,很方便吧?哎,很简洁了啊好,那么有些同学说,那我能不能自已去指定一个ID值啊,可以的啊,注意了啊解释一下,嗯。
19:09
嗯,注解默认的这个ID值啊,就是什么呀,类名的首字母,首字母小写好,那么我们可以怎么着啊,可以在注解中,哎,手动指定这个ID值,怎么指定呢?注意你在这里面正常你应该写成Y6等于,哎,这里面就写你的什么ID值就可以了。明白吧,你想取成ID值,你就在这里面去取就行了啊来你就可以这么来去做了,那么可以省略为可以简写为简写,为什么呀,就是把Y流干掉,直接一个括号往这一标就行了,能明白吗?可以再写的它所以说你看啊,假如说哎,我想让我当前的这个UC controlrl了,它的ID呢,不是类名首字母小写,那你就在里面写,比如说你在里面写个UC,诶,它的ID值就叫做UC了,那明白什么意思了吗?OK,那么当然了啊,一开始的话我们是不要去指定的啊,等后续我们没有办法的时候呢,啊,再这边去指定它,现在我们还用不到它,好,那把这个一加,然后呢,配置文件里面的这个东西一开启,那么其实我们整个这个记忆注解的配置就完成了,好,接下来我们回到我们的啊,接下来我们再去写一个什么呀,测试类啊,我们来看一看,写一个。
20:41
Class啊,放到我们的S的这个包下面,然后呢,这个包下面呢,我们来测试一下的,我们的noation应该写一个整里的类啊来吧,那就接着写吧,Public world test,我们的an OT ono啊,这是我们的驻点啊,Atts。那么首先的话呢,我们还是得去实例化我们的LC容器了啊,Ctx等于用一个class pass X ma,好,首先要把它开始给它什么实例化出来,这里面我们写的是4POINT减等,这是两没然后呢,呃,容器创建好以后,接下来你就会获取你的组件了,怎么获取呢?你看到哈,User controller好好,那我就叫什么userc吧,好,等于什么呀,又一个啊,不叫扭是吧,Get me啊就是什么user,注意。
21:41
ID是它类名手这么小写啊,好,User controller叫class,这就把它获取叫获取到以后我们来输出一下,好,就是这个us准确了啊,我们加上这个UC,好,再来往后写us service,好,Us等于ctx要get b好,这里面写的是什么呀,User service完了。
22:14
是不是得有个啊,对吧,因为你扫描的是这个类,而不是你的接口啊,你一定要记清楚了是吧?所以说来后面得有个什么呀,April好,User service,但是类型的话,我是可以通过接口来去指定的,能明白吧?然后呢,我们再来C输出一下,比如说user service好加上我们的us,再来写user DAO吧,UD啊等于什么呀,CTX2GET b叫做user DAO叫什么来着?JD bc in吧,是不是?哎,User DAO点2CLASS好把它拿到,然后呢,Co输出一下我们的user DAO好加上我们的UDOK,终于写好了,看明白了吗?OK,那接下来我们就来测试一下啊,看看我们现在有没有什么问题啊,注意现在会报出一个错哈,如果不出意外的话。
23:14
是不是出了一个问题啊,错了吧?OK,什么错呢?啊,注意这个错呢,我来告诉大家,他说有一个什么呀,No class defend放的arrow,找不到谁啊,找不到org prefer work a op,有一个什么target source,注意他提到了a op这个东西了,其实我们少倒了一个包,就是如果你想使用注解的这种方式来配置病,那么你必须得把a op的这个包导入进来,能明白吗?哎,这个我一定要给大家强调一下,一定要把a op的包导入进来,如果你不导包就会出现这个错,而且这个错误信息呢,你再来看一下,你看到的时候你得认识啊,就是有个什么错误信息啊,要不然你看上面的啊,就是找不到这个类,或者说下面也行,Class not found exception是找不到A这个包下面的某个类啊,对吧,那你看到这个信息的时候,你就一定要猜到,原来我是少了一个。
24:14
什么包啊,哎,少了一个a op的包,那我们就要把a op的这个包给人家拿过来,好放到我们的live下面来放到这,然后呢,再把这个LP的包给它标pass加进去,明白了吗?加进来以后呢,我们再来做测试找一下,哎,我们来看这几个对象我是不是成功的都获取到了,看明白了吗?获取到了吧,对吧?OK,怎么获取到的呢?就是因为你加了注解了,然后呢,破了也能少到你了,那么就会把你啊管理到我们的LC容器中,那你自然而然就能从这个LC容器中把这个对象给它获取到,所以说呢,这就是我们基于注解的方式来配置我们的病。
25:01
学会了吧?
我来说两句