00:01
各位同学大家好,前面呢咱们完成了基于叉L方式进行并管理,那下面呢,我们来讲解下一种方式,于注解方式进行并管理,在里边呢,我们主要讲解以下几个内容,首先第一个给大家先介绍什么是注解,注解有什么特点,然后第二个搭建咱们案例中的环境,把这个模块并创建,创建之后我们基于注解完成B对象创建,然后基于注解完成属性的注入。咱们主要用注解进行实现,包括最后我们会讲一个全注解开发,就是完全用注解方式,而不需要配置文件可以实现,这是我们要讲的基于注解管理B,那首先呢,咱们看第一个内容就是什么是注解,给各位做个介绍,然后大家来看啊,在JAVA5开始增加了对注解的支持,什么叫注解呢?大家可以理解为注解是代码中的一种特殊的标记,我在图里面给大家写下什么是注解。
01:09
写到这位置,首先第一句话,各位记住,注解呢是代码中的一种特殊的标记,然后这个注解我们可以在就是在这个程序编译过程中,或者说在类加载的时候,或者说在运行的时候被读取执行相应的处理,而开发人员通过注解可以不改变原有代码和逻辑情况下,在原代码中嵌入补充的信息。另外各位记住,注解的格式是一个固定的格式,它的格式是加个艾特符号,然后加上注解的名称,再加个括号,括号里边的有里边的属性名称等于你的属性值,它里边可以有多个属性,就是多个属性名称对应多个属性值,这是一个基本的一个格式,这个各位明确。另外我们继续来看啊,就是注解可以使用在你的类。
02:09
上边可以使用在你的属性上边,另外可以用在我们的方法上面,这些上面都可以用注解,以上是注解一个基本说明,另外我们继续来看啊。在任2.5开始就全面知识的注解,用注解目的是什么呢?通过注解实现自动装配,可以简化死中叉配置,也是大家明确之前呢,我们用叉L用各种方式做配置,其实它并不是特别方便,而用注解之后可以极大简化插满了配置,这就是咱们为什么用注解,然后大家看啊,我课件中特别加了一个星号,这是很重要的内容,因为实际开发中我们一般做的都是基于注解进行实现。以上就是关于注解一个基本介绍,那咱们继续往下来看。
03:03
下面呢,我列出来了,通过注解实现自动装配一个基本步骤,我们先看一下,一会儿咱们就来演示,首先第一步引入依赖,然后第二步叫开启组件扫描,第三步用注解可以定义B,包括用注解完成依赖注入,这个大家先有个了解,咱一会儿进行演示,那下面呢,咱们先把这个环境做个搭建,然后搭建环境之后咱们具体演示我们的效果,先用注解创建并对象,再用注解实现属性注入。那下面咱们开始做一下。首先第一部分我在里边呢,创建一个子模块,咱们做个创建。然后这个模块我给它起个名字,就叫六杠IOC-I notation,就是注解,咱们把它做一个创建。现在给它创建出来。
04:01
等它加载出来。然后这个创建之后,大家注意啊,咱们之前在富工程里边已经引过了依赖,所以依赖就不要再引入了,目前把这模块直接创建就可以了,然后创建模块之后我们继续来看啊,在里边呢,咱们跟之前一样,还是做一些最基本的准备工作。那我们来看一下啊。首先在这里边呢,我们建一个此润的配置文件啊,当然后面呢,咱们有全注解开发,其实可以没有这个文件,但是目前还需要有这个文件,那我来创建。我就叫B点叉L把它做个创建。然后创建之后,在里边咱把那个logo的日志文件给他过来,就是这个文件。我们给他做一个复制。
05:01
所以现在这个最基本的环境,我们就创建出来了。环境搭建之后呢,下面我们来做第一部分,用注解方式来创建B对象,那咱们看这过程该怎么去做,我在里边把步骤给大家来写一下,就是怎么来用注解创建对象,我写到这位,首先我们的第一步操作引入相关的依赖。这是第一步,但是依赖呢,我们应该已经引过了,所以这一步需要再引入了,咱们已经完成了,然后里边的第二步操作,这里写下第二步是什么呢?它叫做开启组件的扫描,这是第二步,那什么叫组件扫描,给大家特别来解释一下啊,咱们看一下课件中有一段描述,大家来看一下。首先此文里边默认是不支持注解方式进行B导管理的,所以咱需要在此文的配置文件中配置一个部分进行组件扫描,就让他开启这个自动扫描功能,让他用解能实现相关的操作,所以咱要开启这功能,如果你不开启,那他肯定做不到注解的过程,那咱们下面我们来写一下大概怎么做。
06:23
就是现在我来到这个配置文件中把它打开。然后打开之后呢,首先呢,在里边咱要加上一个名称空间,或者说叫命名空间,这个命名空间就是咱之前用那个叫contest的,那我现在啊,我就从课件中把它就直接复制过来了,就是里边这个contest的。把这个拿给他拿过来。然后复制之后下面位置再加上这个test,我给他快速加一下啊,用这个咱给它改一下就可以了。
07:01
那我来做个修改。这里边叫car太。然后这个叫康test,所以现在把这个名称空间就加进来了,加进来之后下面做件事情就是开启组件扫描,让spring能用注解方式完成并管理,包括创建对象,包括助属性。那得怎么做呢?我写一下啊,我们加上一个叫contest。里边的这个叫comment,看大家看这个名字是不是有组件意思,看是不是叫扫描啊,就是开启这个组扫描,然后往后看啊,这里写一个叫base package。Pack什么意思,是不是有的意思,就指定你要扫描哪个里边的相关的注解,那这里我们加个,比如加一个com.at硅谷,那什么意思呢?给大家说明,因为这个包咱没有创建啊,我把这包咱先给它创建出来,我这一会儿我们操作方便。
08:05
Com at这个先给创建出来,然后咱们来看啊,它是什么意思呢?我现在我在com at硅谷这个包里边,或者说在这个包和它的子包里边,我建了类,如在类上边或者属性上边,或者方法上边加了什么的注解,那这里边就能扫描到,根据注解实现降的功能,这就叫开启组件扫描,比如说这里写到的就这句话。它会扫描指定的包及其子包中所有类,如果类上面有注解,就根据注解完成切换功能,不管你是创建对象还是注入属性都可以进行实现,所以各位就是这种思想啊,我再重复一遍啊,咱说的具体点就是假如说啊,我现在比如我建个类啊,这个类比如说啊,我叫us。
09:02
然后大家看我这个类是不是在死人六的这个里边,而这个是不是就是at硅谷这个里的中内容,那这个时候比如说啊,我在类上边加上一个注解,这注解咱一会解释,那他怎么做就会扫描包里边类上边看有没有注解,如果有注解之后根据注解实现相关功能。那这个时候,比如说里边啊,我有一个属性。假如说啊,我有一个属性,然后比如说现在我在属性上边,比如我加了一个注解,那这个时候它就会扫描里边的一个注解,根据注解实现降动功能,这就叫开启组件扫描,这各位给他要明确这一步必须要有,没有这步的话,它肯定最终不能实现我们的这个最终的功能。这个啊,咱们做一个基本的说明。这个我们先说到这里,组件扫描,然后组件扫描我们来看啊,现在我写的这个呢,是一个最基础的一个实现,就是最基本的一个实现,但是这个写法其实还有别的方式可以做到,那咱们啊继续往下来看一下,大家看我课件中这是最基本的写法,那往下来看,下面还有两种情况,什么情况呢?咱们直接复制带着各位看一下这个情况。
10:23
然后下面啊,我们看第二种情况,因为咱们目前用的第一种情况就可以了,但是咱们再说另外两种情况,让大家知道的更多一点。那我们看这种情况啊,大家看。这个情况什么意思呢?它就表示排除哪些内容不进行扫描,那什么意思?大家看这个位置,一个是可Lu filter是不是就是排除过滤,然后这里边两种方式,一个根据注解,一个根据你的类型,比如现在我这么做,它就表示啊,这个注解它就不径扫描,这叫类型,那就表示这个类它上面的注解就无径扫描,这叫排除某些规则,这是我们写的第二种情况,另外还有第三种情况,它表示只扫描某些组件,别的组件都不进行扫描,那大家看啊,就这里边抗P硅谷,大家看这里因可录的是叫包含,它就表示第一个叫注解。
11:24
就是我现在啊,只扫描这个注解,别的注解都不扫描,然后第二个表示类型,它就表示只扫描这个类上面注解,别的类都不进行扫描,这是里边的另外两种情况,咱目前用的第一种情况就足够了,因为咱目前是所有的都进行扫描,我就扫描com.at硅谷点这个此文六里面的注解,完成创建对象,包括注属性。以上就是开启组件扫描这个咱做一个说明,然后这个之后我们继续来看啊,下面呢,咱就开始完成这个对象的创建。
12:04
那对象怎么创建,给各位做个说明,比如我现在啊,我在里边,我再来建个包,这个包我就叫B啊,就是完成bin对象创建,我把user呢放在这个B里边去啊,咱看着方便。把它直接移过去啊,啊或者说啊,我这么来做,我把这个先给它删掉啊,咱重新创建一下。找到我刚才这个项目里边,我通过这个给他先删掉啊,咱重新创建,刚才只是为了简单演示一下。给它重新创建一下,然后大家看啊,现在我在这个B里边,比如说我现在建个类,这个类我就叫user,而我现在想要把它的对象进行创建,那这创建对象各位都会啊,用之前的方式,咱是不是加一个B。然后加上一个ID。再加上一个class,加上径,加上名字,用它是实现,但是目前不需要这么做,咱们用注解可以做到,然后大家来看啊,我这里写到。
13:12
在spring里边呢,提供了多个注解,这些注解可以直接用在我们的类上边完成B对象的创建,也就说在这个user类上边,咱们加上注解就能把对象进行创建,然后这注解呢,一共有这么四个注解都能创建对象,那再来看一下啊,第一个叫commentent,第二个叫第三个service,第四个control,第四个注解,特别说明啊,其实它们的作用都是一样的,也就说我现在在这这上边我写哪个注解其实都是可以的,指咱一般习惯这么来用,Control注解一般用在我们的web层中,Service用在service层,作为业务逻辑层,Pary用在Du层里边,Commentent是普通的这个B的定义,这是里边的四个注解可以创建对象,那下面咱们做个演示,咱看怎么做啊。
14:11
首先我加第一个注解,就这个comment,然后comment中呢有个Y指定它的名字,这是我们写到的,而这个写法就类似于咱们那个文件来一个D,咱们个,然后加上你那个包类路径,它就类似于这个写法,ID就是它,然后这个路径因为咱们在类上面进行定义,所以现在把这个对象就完成创建。这是我们提到的啊,然后这里特别说明就是这个属性呢,其实你可以不写,你不写的话,它它的默认值就是U,就是你的首字母小写。这个是我们看到的这个部分,那咱们把这个完成之后,下面呢,咱们做个测试,试一下这个效果,看它是怎么样的。
15:05
我在里边啊,建个类,咱们做个测试。Test user。然后加个方法,OB是contest等于new上一个pass,加上配置文件,并点叉L。然后咱们得到这个对象啊,就是get b。我直接加上类型了user.class得到user对象,最后咱们可以把user侧对象,我在里边直接做个输出,然后咱们执行看一下效果,最终能不能做到,我们来试一下效果。然后大家看啊,现在输出了,咱们看这过程中啊,它里边就是最终创建了我们这个优侧这个对象,然后你看最终输出的是不是优侧对象,所以证明咱们现在啊,这个就完成了,包括在里边啊,可以给它加个名字,但是这其实可以不写,因为它默认就是优。
16:10
咱给他加上。咱们给它也试一下啊,根据这个ID的职业取一下,跟刚才效果应该是一样的,就是创建了这个右侧对下。这个啊,是咱们完成的第一个注解,然后刚才提到啊,它拥有四个注解,你用哪个都可以,比如说啊,咱可以再换一个。我再换一个注解。咱们再加一个啊,比如第二个我画一个注解,这个注解。叫这个repary后面可以省略,我就省略了啊,然后咱把它直接执行一下,看一下效果,我这里换成了repary。大家看效果是不是一样的,那比如说我再换一个注解啊,咱再试一个啊。咱再换个注解是这个service,然后同样进行测试,效果应该都是一样的,就是最终都能完成我们这个对象的创建,是不是也可以,包括还有最后一个,咱们最后再试一个啊。
17:09
最后这个注解叫controller。然后最后我们来试一下。然后我们看效果啊。大家看是不是一样的,比如说咱们发现啊,目前咱们就用这几个注解都能完成B对象创建,它的用途就是在类上边加上注解,你可以指定名字,如果不指定,默认就是首字母的小写,就是这个U,用这四个注解都能实现相同的作,作用就是创建对象是咱们一般习惯这么来用,Controller用在web层,Service在service层,Pary用在deal层。作为普通B的定义,这是咱们用注解方式创建B对象,咱们讲到这里,大家把这四个注解给它记住,另外特别记住这个组件扫描这过程,咱们扫描这个包和它子包中的类上边有没有注解,如果有注解,根据注解完成相应功能,咱目前做的用这些注解完成对象的创建。
我来说两句