您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

idea__Spring5框架07——IOC注解按照作用分类,注解详解。

IOC注解按照作用分类,注解

    • 一、IOC注解按照作用分类
    • 二、用于创建对象的___Repository注解。
    • 三、用于注入数据的___ Autowired注解。
    • 四、用于注入数据的___ Qualifier注解。
    • 五、用于注入数据的___ Resource注解。
    • 六、用于注入数据的___ Value注解。
    • 七、用于改变作用范围的___scope注解。
    • 八、和生命周期相关的___PreDestroy和PostConstruct注解(了解)
        • ————————
        • 创作不易,如觉不错,随手三连点赞,收藏,关注,谢谢~~

一、IOC注解按照作用分类

--------------------------------------------------------------------------------------------------------------------

用于创建对象的
  他们的作用就和在XML配置文件中编写一个标签实现的功能是一样的
   Component:
      作用:用于把当前类对象存入spring容器中
      属性:
         value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。
   Controller:一般用在表现层
   Service:一般用在业务层
   Repository:一般用在持久层
   以上三个注解他们的作用和属性与Component是一模一样。
   他们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰
--------------------------------------------------------------------------------------------------------------------
用于注入数据的
   他们的作用就和在xml配置文件中的bean标签中写一个标签的作用是一样的
   Autowired:
      作用:自动按照类型注入。只要容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
           如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。
           如果Ioc容器中有多个类型匹配时:
      出现位置:
        可以是变量上,也可以是方法上
      细节:
         在使用注解注入时,set方法就不是必须的了。
   Qualifier:
      作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以(稍后我们讲)
      属性:
       value:用于指定注入bean的id。
   Resource
     作用:直接按照bean的id注入。它可以独立使用
     属性:
         name:用于指定bean的id。
   以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。
   另外,集合类型的注入只能通过XML来实现。

   Value
      作用:用于注入基本类型和String类型的数据
      属性:
         value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式)
              SpEL的写法:${表达式}
--------------------------------------------------------------------------------------------------------------------
用于改变作用范围的
   他们的作用就和在bean标签中使用scope属性实现的功能是一样的
   Scope
      作用:用于指定bean的作用范围
      属性:
         value:指定范围的取值。常用取值:singleton prototype
             如果不写,默认情况下是单例的
--------------------------------------------------------------------------------------------------------------------
和生命周期相关 了解
   他们的作用就和在bean标签中使用init-method和destroy-methode的作用是一样的
   PreDestroy
      作用:用于指定销毁方法
   PostConstruct
      作用:用于指定初始化方法
--------------------------------------------------------------------------------------------------------------------

二、用于创建对象的___Repository注解。

给dao实现类添加注解

在这里插入图片描述
测试一下,没有问题

在这里插入图片描述

三、用于注入数据的___ Autowired注解。

给service实现类 ,如图:

在这里插入图片描述
运行,测试一下,没有问题。

在这里插入图片描述
为什么会这样呢?就成功了呢?我们来看一张图就懂了,自动匹配。

在这里插入图片描述
那如果我们有两个或者多个匹配成功的类型会怎么样呢?
如果有唯一的一个匹配时,是直接注入的
如果有多个匹配时:
   首先,它先按照类型圈定出来匹配的对象
   然后,接下来。第二步,它会使用变量名称作为bean的id在圈定出来的对象里面继续查找哪个跟它一样,如果有一样的,它也可以注入成功。如果两个或者多个都不一样,就报错。如图:
在这里插入图片描述

四、用于注入数据的___ Qualifier注解。

这个 Qualifier 注解是跟上面的 Autowired 注解搭配一起使用的。Qualifier不能单独使用。

上面的Autowired注解,它是自动匹配的,那么当有两个bean匹配成功的时候,我们能不能给它指定一个bean呢?当然可以,用Qualifier注解。

我们来演示一下,我们有两个dao实现类,他们的代码都是一样的,唯一不同的是他们的bean的id不一样,一个叫 accountDao1 ,一个叫 accountDao2

在这里插入图片描述

他们的id不同

在这里插入图片描述
那这样的话,我们就有两个bean是自动匹配成功的,我们想要指定其中的一个,就可以使用Qualifier注解来指定一个,如图:

在这里插入图片描述
运行,我们发现,执行的是accountDao1 ,没有问题。

在这里插入图片描述

五、用于注入数据的___ Resource注解。

我们通过上述的两个注解,是不是觉得它们两个太麻烦了,能不能更简单一点?能不能不用他们两个,我们直接指定一个bean呢??

当然可以,Resource注解就可以做到。

我们演示一下

我们把之前的两个注解给注释上,换Resource注解,指定bean的id为 accountDao2

在这里插入图片描述
运行一下,没有问题,就是accountDao2执行

在这里插入图片描述

六、用于注入数据的___ Value注解。

谁的El表达式就去谁的地方取值,如何分辨是谁的,就看这个$大括号写在哪里了,如果是写在jsp文件中,不用想,那肯定是jsp的EL表达式,此时一定会去四大域中获取数据。如果写在Spring配置文件注解中,就是Spring的EL表达式。如果是写在Mysql的配置文件中,那就是Mybatis的EL表达式。

在这里插入图片描述
测试一下:

在这里插入图片描述

七、用于改变作用范围的___scope注解。

我们先来运行一下,看一下没用scope注解之前的效果,scope注解默认值为singleton,为单例,如果不写,默认情况下是单例的,所以结果为true

在这里插入图片描述

我们加上scope注解,值为prototype。

在这里插入图片描述
运行,测试看一下,为false,
在这里插入图片描述

八、和生命周期相关的___PreDestroy和PostConstruct注解(了解)

改成单例,创建两个方法,注解上

在这里插入图片描述
运行,测试一下

在这里插入图片描述

————————

创作不易,如觉不错,随手三连点赞,收藏,关注,谢谢~~


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进