00:00
各位,在之前内容中呢,我们讲完了IOC里边的并管理操作,基于叉L方式实现对象创建以及注属性。咱们在讲并管理概念中提到了并管理指的是两个操作,一个是创建对象,一个是助属性。而并管理有两种具体实验方式,一个是基于叉mlo配置文件实现,一个是基于注解实现。而咱们把叉方式对象创建和属性注入我们已经完成了,那咱下面咱就继续来学习一下基于注解方式实现对象创建以及注属性,我在里边给大家写一下,就是基于注解方式。我们来实现对象创建以及入属性,那首先呢,咱先看第一个概念,也就是什么是注解。
01:01
给各位做个说明。这注解我们在Java基础阶段,各位应该是学过这个东西,那各位来做一个回顾,什么叫注解呢?我写到下边。咱可以理解为啊,注解是什么?是你代码里面一些特殊的。这么一些标记,而它的格式是怎么样的呢?各位应该知道啊,首先我们写个艾特符号,然后加上你的注解的名称,第二个括号,注解里边呢,可以有属性,就是属性名称等于你的属性值,它里边支持你有多个属性,就是多个属性名称,然后有多个属值,它们中间用个逗号进行隔开,所以这个是注解的一个基本格式,这各位知道,代码中的特殊标记,它的结构就是艾特符号加上注解名称,然后里边有属性名称,包括有这个属性值,而注解咱看一下咱之前呢,其实一直在写个东西。
02:10
应该知道这个东西。叫艾是不是加个test的,这是不是就是一种注解啊,所以咱们现在讲的是注解方式,做这个B关联操作,这各位知道是不是注解,另外我们看第二句话。各位要知道啊,就是咱们现在我们使用这个注解,你要知道注解可以在什么地方用呢。大家看这test词四是不是一个方法,比如说我们现在在方法上面可以加注解,另外我一个类中是不是有属性啊,属性上边可以加注解,另外我的类上边也可以加注解,所以说大家要知道注解。他可以。作用在我们的这个类的上边,包括你的方法上边,包括属性上边,都可以加上这个注解,第二句话,各位记住,另外第三句话都要明确啊,咱用注解的目的是什么?
03:11
咱为什么要注解?给大家说明啊,因为咱之前用的是不是都是配置文件,我在配置文件中要写各种配置,如果说你这个B有很多,咱是不是要写大量配置,所以它并不是很方便,而咱用注解的目的是什么?就是为了让你的配置更加简洁,更加优雅,也就是说简化我们差配置,咱可以用很少的差量配置,或者说你不用差M的文件就用注解这功能也可以做到,所以这是注解的目的,它的目的就是为了简化我们插白lo这个配置,把这个配置使用更优雅更简洁的方式进行实现,所以这个就是关于注解的一个基本说明,各位先知道什么叫注解,所以咱们下面就是在并管理中就用注解方式实现我们的操作。
04:06
这个啊是第一个基本概念。然后概念说完之后,我们看第二部分来讲一下,在我们此文里边呢,我们要进行并管理。然后咱们首先做的肯定是创建对象。就是B管理里边创建对象,然后这个创建对象呢,在里边它给我们提供了有这么几个注解,就是此文里边针对B管理中创建对象,它提供的这个注解。我写一下啊。针对。并管理操作中的这个创建对象,给我们提供了这么几个注解,然后把这个给各位先做个说明,然后咱们做个演示,就是基于注解方式创建对象有哪些注解。然后各位写这位置啊,在此分里边呢,它针对并管理进行对象创建,主要给咱们提供了有这么四个注解。
05:06
然后我写到这个位置。首先第一个注点,它叫做comment。我先写出来,然后我分别都做解释,这是第一个注解,然后里边还有第二个注解,这注解它叫做service。这是第二个注解,另外还有第三个注解,第三个注解呢,它叫做controller。这是第三个,另外还有第四个,也就是最后一个注解,这注解叫repy。我写一下啊。Repary,所以这是在词文里边针对创建对象给我们提供有这么四个主体,这各位也都知道,包括咱后面都会用到。然后四个注解我大概说一下,第一个叫commentent,这表示呢,就是我们四维容器中,它里面提供一种普通的组件,就是咱们用它都可以实现创建对象。然后第二个叫service,这注解一般用在我们的业务逻辑层或者service层上,第三个叫controller,这注解一般用在咱们的web层上,然后这个叫repry,它一般用在我们的Du层或者说持有层上,所以里边有这么四个注解。
06:32
但我强调就是我们刚才我提到每个注解呢,它可以用在不同的这么一个层上,但其实我们实几中,比如你把comment用到我们的Switch层,包括把Switch注解用到低构层都是可以的,它并没有给你区分哪个注解到底用在什么地方,只是为了我们开发更加方便。它一般建议我们把wi驻理用在servicewi层,把controller用在web层,把re controlry用在我们的do层,但你把Switch用在do层中也没有错,所以我强调这四个注解里边有个特点啊,就这句话。
07:09
我们上面的四个注解。它们的功能是。一样的,都可以用来创建你的B的一个实例,或者说都可以用来创建对象,在这个啊是子润里边创建对象的四个注解,就是四个注解咱都可以用,只是我们一般习惯把每个注解用在不同层中,这么做只为了让我们开发人员更加清晰当前组件所扮演的角色,但实际中你把它混用也都是可以的,这个啊是咱们对注解的一个说明,创建对象这么四个注解。这个我们做了介绍,然后介绍之后呢,咱下面给各位来演示这个效果,就是咱们基于注解方式,在并管理中来实现对象创建。
08:04
第三个写一下啊,基于注解方式实现。对象的创建,把这过程给各位,下面我来做一个详细的演示,那咱们看怎么来做。我在里边写一下啊,首先第一部分呢,咱们先把这项目,比如说为了明显,我把项目再重新复制一份,咱们到一个新的项目中,专门演示我们这个注解操作,比如说叫子任务DEMO3。把这个复制,然后复制之后我用这个打开,我刚才复制这个spring demo3把这个我们先给它打开。咱们等他啊打开。然后打开之后呢,在里边我把这个名字改一下,我们叫任务DEMO3,在里完成咱们注解方式,创建对象以及助暑校。这个啊,把它改一下啊。
09:02
咱们改一下里边这个名字。三。这个啊,完成修改,然后这先关掉,然后这个改完之后,咱下面看一下这个我们到底应该怎么去做,这里边有很多东西,我把这些东西先给它删掉,然后咱一会儿重新来写。我先都删掉,就保留一个最基本一个结构啊,包括配置文件,我就保留一个配置文件。其他的先都给他拿掉。哦,这里边啊,我就保留。先都删掉啊,一会咱重新来写啊。这是为了我们测试类啊这么一个使用,所以现在呢,我们把这个项目,我们给它完全做了一个复制,然后复制之后下面咱看一下怎么基于注解方式实现对象的这个创建,看他怎么做,给各位写一下它的详细的步骤啊,咱来实现啊。
10:05
首先里边的第一步操作,如果说咱在B管理中要基于注解方式实现,首先第一步你需要引入这么一个。依赖啊,这是第一步,然后依赖引入什么呢?除了咱们之前最基本的这几个依赖之外,它还需要一个额外的依赖,那依赖是什么?但是各位找一下,咱还是到这里边把这个LBS打开,然后咱看里边的第一个依赖。叫什么?就是AOP,所以在里边呢,你要做注解操作,它需要额外引入一个AOP的依赖,A op是什么?咱又会提到啊,而a up里边,他为了注解里边做了一些功能,他在这里边做了封装,所以咱需要把这依赖做个引入,这是里边的第一部分引入a up的依赖,那这依赖我给各位,咱把它直接复制到我们这个项目里边来。
11:02
就是lib中有个a op,然后把A给它引入到我们当前的项目里边来。咱做个引入。在里边我点这个加号。然后找到DEMO3中这个AOP。把这个我们引入,所以这是里边的第一步,先引入a up的依赖,这各位记住,然后这个做到之后,我们看里边的第二步,第二步要干什么呢?给大家强调,因为咱们现在是不是要用注解方式做操作,也就说我们最后呢,我们要在我们相关的类上边加上这些注解,然后实现就要创边,刚才咱们提到注解可以用在类上边,方法上边,使用上边,而这几个注解因为他们是创建对象,所以咱们在类上边可以加这个注解,但你加注解之前,第二部分呢,咱要做件事情,做什么事情呢?它就叫做开启你这个。
12:02
组件的一个扫描,这是第二部分,那什么叫组件扫描呢?就你现在啊,告诉此文这个容器,我现在在哪个类里边要加上注解,然后去扫描这些类,比如现在我这里边,比如说你看啊,咱举个例子,假如现在我这个包在com.at硅谷5T子DEMO,我这里边,我可能有很多类,然后让他去扫描我这个包中这些类,看类上边有没有注解,有注解创建对象,就指定它要扫描的那个位置,看哪个位置中有注解,有注解进行对象创建。所以咱需要开启组件扫描,如果你不开启,那spring不知道你要做什么事情,他也不知道要扫描那个包中的哪个类。所以这是第二部分,为了做到我们注解瑞能给他找到,所以咱们需要做个开启,那怎么开启给各位写一下啊,咱们做法就是我们可以来到这个配置文件中。
13:03
这个我先给它去掉。然后在配置文件中呢,咱需要给他先引入一个名称空间,这名称空间咱在之前用到过,就是咱们那个外部资源文件的时候,有一个叫contextt,所以咱需要把这个引入,那我现在啊把它引入一下,因为之前引过了,我就不在这里写了,咱直接写那个具体配置。那我现在给他引入,把这个先复制一份。然后咱们给它改个名字,叫这个contest。就上下文啊,Contest后面这位置也叫contest,然后把下面两段内容,咱们给它写成我们的这个contest。我们给它改一下啊,首先第一个beans改成contact,这个beans也都改成contactt,所以咱需要把这个给它名称空间引入,然后引入之后在配置文件中,咱就加上我刚才说的那部分,叫做开启你的组件的扫描,就指定我扫描哪个包中的哪个类中的,看哪个里边有注解。
14:13
那怎么做,咱现在里边加上这么一个,有一个标签,大家看第一个标签啊,叫test com词,看咱就要给它加上这么一个标签。各位注意啊,就是开启,你看comment是组件,此开是扫描,然后在里边呢有个属性叫这个base package。加这个属性,然后大家看。这个标签叫做组件扫描base package什么意思?咱就看package是不是这个包啊,也是指定一下你扫描哪个包中的这个内容啊,那我们就写上我们包的那个名称。但是包的名称大家注意啊,就是现在,比如说我在这里边,假如我现在啊,我再给他创建这么一个,就是几个新的包,咱一会儿效果更明显,就是现在我再写上这么一个包啊,假如这个包我就叫这个。
15:14
Service。是一个包,然后创建wi之后,比如现在我再建个包,叫这个Du啊,或者叫map,大家看我现在是不是有很多包,比如现在我想实现让这些包里边的类都能进行扫描,那大家说这怎么做?因为我是多个包吗?注意它的写法啊,多种写法,第一种写法,比如现在我想扫描Du这个包里的类,那怎么做?第二他那路径com.at硅谷点死人五点上。Do,这就可以了,但我现在还想扫描service,那怎么做?首先第一种写法,你来一个逗号,再加上这个路径,比如这个SPRING5点上service这么加可以就是中间用逗号隔开,这是第一种写法,给各位写一下啊。
16:07
小这位置就是如果说呢,咱要扫描多个包,那怎么做,咱把多个包之间。我们使用这个逗号隔开。使用逗号隔开,就是咱们看到的这么一个效果,这各位知道,另外这里边呢,还有一种写法给大家说一下啊,因为大家看我们现在do和service他们是不是都在这个at硅谷四五这里边,所以这里边呢,咱可以把这扫描做个简化,怎么做看我的写法啊。大家注意你看啊,我就写一个点at硅谷,或者说加一个四股,不加也可以,因为我现在这些包是都在com面ad硅谷下,所以咱们写它什么,写它的上层目录,这种写法就是你写扫描那个包它的上层。
17:07
目录,因为他们都在com.AP硅谷下,所以这么做就可以了,这就叫开启组件的扫描,指定你扫描哪个包中的类,如果你多个包用逗号隔开,或者说写他们这个上层目录,这么写就完成了开启组件扫描。你只有开启之后,Spring才能找到你的注解,如果你不开启,他不知道到哪里去找到你的这个注解这部分。所以这个啊,就是我们的第二步咱就完成了,然后完成之后咱写第三步,第三步怎么做呢?咱就可以创建我们的类,然后我们在这个类上边添加咱们这个创建对象的注解就可以了,就加上我们里边的四个中的任何一个,这对象都可以创立,这是里边的第三步,那各位写下啊。
18:00
比如现在我就在这个里边,咱们给它创建一个类,加这个类我起个名字就叫。U。Service。大家看是不是一个类,然后我在类里边,比如我现在几个方法,我叫public with,我就叫这个A。在A里边做个输出啊,比如说叫service a,所以大家看现在我这个类是不是创建了,然后创建之后按照咱们之前方式,我肯定是在这个里边加个B标签,然后加个ID,加个class是不可以了,但是现在我不需要这么做,我用注解方式可以创建,那怎么做呢?咱就在类的上边加上一个注解,注意是类上边,因为你要创建对象,然后加什么注解。加上咱们刚才说的四个中的任何一个都可以,那比如说再加一个,我就加这个叫comment。
19:00
大家看到把这加上,然后在common后面,咱有一个叫做value,后面可以加个名字,比如名字我叫user。Service,这样的话就完成这么一个注意添加,然后我强调啊,这句话和咱之前写那个b ID class它的写法是类似的。就这里边你注意ID的这个值跟你这个Y这值是一样的,是等价的,然后这cost里边加上它那个包的路径,所以这样的话,咱们把这个就完成了啊,这是我们写的用注解方式串对象。这各位给他知道啊,但是里边我强调啊。就是我们在这个注解里边是不是写上你那个ID这个值,或者它的名字,就是这个可以省略,就是注解里边那个Y6属性值,你可以不写。就是可以省略不写,如果说你不写的话,它的默认值就是什么,就是你的类,它的那个名称,然后把首字母给你小写。
20:11
不是,各位是否能听懂啊,就是类的名称,我类是不是叫user service,然后把user service的首字母小写。它首字母小写这U是不是就变成它,就你不写的话,默认用这个值写上也可以定义,比你定义别的名字也可以啊,所以这是它里面的特点。我说各位同学是否能听懂啊,我再解释一遍啊,咱们做法很简单,在类上边加上这个注解,Commentent service re report或者controller都可以,我是以这个为例,然后里面有个y value中的值就相于咱之前B标签中的ID值,跟它等价,但是这个部分你可以不写,如果不写的话,那它的默认值是什么?就你类名的首字母小写默认就是它,你可以不写,然后通过这个能得到你的对象。所以这个啊,是咱们。
21:07
里边的这么第三步创建就是。使用注解把对象做创建。这一步我们就完成了,然后完成之后呢,最后咱可以把它做一个测试,那咱就看一下最后的结果啊,看看这种方式能不能做到,那我来到里边咱们测试一下啊。我来一个test。Public,我就叫test这个。Service。然后在里边写代码,就是咱之前写到的第一个加载配置文件application contest contest等于new上一个class pass叉L,然后里面加上这个B1。点叉L就是我们的配置文件,然后第二部分contexttest.get b里边加上你这个名字,我强调啊,这个名字呢,咱之前加的是不是ID这个值啊,现在加的是用service,如果你不写的话,默认就是你类名的首字母小写,咱就加上这个user service,后面加上user service.class然后它返回到就是我们这个user对象。
22:25
然后咱们把它做一个输出。包括里边我们做一个。调用这样的话,把这个我们就完成了,然后我把它最终咱们来。执行一下,看一下里面这个结果啊,大家看它到底是什么样的,你看这个注解方式对象能不能创建出来。然后各位看第一个。对象是不是输出了,第二个这里边的方法是不是调到了,所以这样的话,我们就完成了这个过程啊,咱们把它就做到了,然后这个过程怎么做到的,给大家分享他这个执行的流程。
23:05
首先第一部分咱是不是要加载配置文件,它在加载配置文件的时候,在配置文件中咱是不是只配置这段话,不要叫做开启组解扫描,当这句话一生效,此人就知道你现在要用注解方式做到,那怎么做,它就到你配置的包里边,找到包中的所有类,如果说你类上边有这个相关的注解,那他根据注解就把你的对象创建,它就是做这过程,然后咱们对象创建之后,咱就调用,包括做输出,最终把这过程我们做这个完成,所以这样的话,咱就把这个对象创建就完成了,里边就这么一个做法。包过程中,咱刚才说到这里边除了你加comment,加其他注解也可以,那咱们也是做演示。比如现在我换个驻地。咱换个service。
24:01
大家注意啊,后面你可以写可以不写,因为默认就是这个值,那现在我把它再做个执行,因为我换成了service。再看它的效果是什么样的。大家看是不是一样的,比如说我再换一个啊,咱用这直接换了,我再换一个叫controller。然后咱们把代码我们也是执行一下。咱看一下。效果是不一样,比如说我再换一个,那个叫repy。然后把这个代码我们也是做个执行。再看里边。所以各位看到啊,就是我刚才提到的这四个注解都能实现对象创建,只是咱们一般开发人员习惯。把你不同注解放到不同从中,而从中一般我们放的是这个注解。但是你放别的注解功能也可以做到,所以这样的话,咱们把这过程就完成演示,它就是在spring里边基于注解方式创建对象,咱们把这过程完成了一个详细说明啊,各位把这个能给他自己动手操作出来。
我来说两句