Spring Bean的配置方式

2023-05-16

在配置前先了解bean元素的相关属性:
作为 Spring 核心机制的依赖注入,改变了传统的编程习惯,对组件的实例化不再由应用程序完成,转而交由Spring 容器完成,在需要时注入应用程序中,从而对组件之间依赖关系进行了解耦。这一切都离不开Spring 配置文件中使用的元素。
Spring 容器可以被看作一个大工厂,而 Spring 容器中的 Bean 就相当于该工厂的产品。如果希望 这个大工厂能够生产和管理 Bean,这时则需要告诉容器需要哪些 Bean,以及需要以何种方式将这些 Bean 装配到一起
常用的属性
在这里插入图片描述
bean 的id 和 name的区别:
id和name都是spring 容器中bean 的唯一标识符。

  1. id: 一个bean的唯一标识 , 命名格式必须符合XML ID属性的命名规范
  2. name: 可以用特殊字符,并且一个bean可以用多个名称:name=“bean1,bean2,bean3”,用逗号 或者分号或者空格隔开。如果没有id,则name的第一个名称默认是id

spring 容器如何处理同名bean?(同名bean:多个bean 有相同的 name 或者 id,称之为同名bean)
*同一个spring配置文件中,bean的 id、name是不能够重复的,否则spring容器启动时会报错。
*如果一个spring容器从多个配置文件中加载配置信息,则多个配置文件中是允许有同名bean的,并且后面加载的配置文件的中的bean定义会覆盖前面加载的同名bean。
1、在spring同一个配置文件中,不能存在id相同的两个bean,否则会报错。
2、在两个不同的spring配置文件中,可以存在id相同的两个bean,启动时,不会报错。这是因为 spring ioc容器在加载bean的过程中,类DefaultListableBeanFactory会对id相同的bean进行处理:后加载的配置文件的bean,覆盖先加载的配置文件的bean。DefaultListableBeanFactory类中,有个 属性allowBeanDefinitionOverriding,默认值为true,该值就是用来指定出现两个bean的id相同 的情况下,如何进行处理。如果该值为false,则不会进行覆盖,而是抛出异常。

spring 容器如何处理没有指定id、name属性的bean?
*如果 一个 bean 标签未指定 id、name 属性,则 spring容器会给其一个默认的id,值为其类全名。
*如果有多个bean标签未指定 id、name 属性,则spring容器会按照其出现的次序,分别给其指定 id 值 为 “类全名#1”, “类全名#2”

1、 Spring XML配置方式配置Bean
创建com.gx.model.User类 用于演示:

在这里插入图片描述
1、 在src目录下创建applicationContext.xml配置文件,并配置好bean元素
在这里插入图片描述
2、 创建一个测试类com.gx.test.Demo:

在这里插入图片描述
以上就是Spring XML的配置方式,以下的注解为Junit4常用的注解
在这里插入图片描述
在引用时需要导入hamcrest-all-1.3.jar架包,使用Spring5+Junit4是一个为了测试为目的,且能组合成灵活表达式的匹配器类库。
执行的顺序为:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
在Test注解中有两个属性timeout测试运行毫秒、expected期望出现异常

2、基于Java注解的配置方式
应用中 Bean 的数量较多时会导致XML配置文件臃肿,因此可以使用注解方式配置解决。
·@Component
可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),
并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可,默认情况下生成的id名称为类
名称的首字母小写。
·@Repository
用于将数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
·@Service
通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与@Component 相同。
·@Controller
通常作用在控制层,用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
·@Autowired
默认按照 Bean 的类型进行装配。
用于对 Bean 的属性变量、属性的 Set 方法及构造函数进行标注,配合对应的注解处理器完成Bean 的自动配置工作。
·@Resource
其作用与 Autowired 一样。
其区别在于 @Autowired 默认按照 Bean 类型装配,而 ·@Resource 默认按照 Bean 实例名称进行
装配。
·@Resource 中有两个重要属性:name 和 type。
Spring 将 name 属性解析为 Bean 实例名称,type 属性解析为 Bean 实例类型。如果指定 name
属性,则按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配。
如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果
都无法匹配,则抛出 NoSuchBeanDefinitionException 异常。
·@Qualifier
与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配,
Bean 的实例名称由 @Qualifier 注解的参数指定。
·@value
给属性赋值

一、编写com.gx.model.UserAnnotation类 并配置@Component注解:
在使用Component注解时要注意若不声明value属性值时:
会根据类名生成默认的名称:
当类名以一个大写字母开头时,bean的名字为首字母小写的类名
例如:User->user IdCard->idCard
当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致
例如:URL->URL XDMuu->XDMuu
*使用注解相当于告诉Spring创建一个name为userAnnotation的bean

在这里插入图片描述
二、在applicationContext.xml配置文件中添加注解扫描的配置:
在这里插入图片描述
三、编写测试方法:

在这里插入图片描述
3、 基于类的配置方式@Configuration:
使用XML案例的com.gx.model.User包下的User类
一、 编写 SpringBeanConfig 类:
使用该注解相当于,SpringBeanConfig为配置文件

在这里插入图片描述
二、 编写测试方法:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Bean的配置方式 的相关文章

随机推荐

  • 二维数组的使用

    实例1 二维数组遍历 span class token macro property span class token directive keyword include span span class token string lt st
  • C语言scanf()函数

    scanf 函数输出格式为 xff1a flags type scanf 函数从输入设备按照指定的类型输入对应类型的若干个数据 xff0c 遇到空格 制表符和回车时 xff0c 读取结束 和字母中间的数字表示最多允许读入的数量 scanf
  • 字符数组与字符串

    字符数组与字符串 一 字符串实际上是使用空字符 39 0 39 结尾的一维字符数组 二 字符数组实例运行结果 三 字符串实例运行结果 四 字符串的定义如果要构造一个字符串 用指针定义如果要处理一个字符串 用数组定义实例运行结果 五 字符串赋
  • C语言的输入、输出

    C语言的输入与输出 一 scanf 和 printf 函数实例运行结果 二 getchar 和 putchar 函数实例1运行结果实例2运行结果 三 gets 和 puts 函数实例运行结果 一 scanf 和 printf 函数 实例 s
  • C语言中操作字符串的函数

    C语言中操作字符串的函数 一 函数表二 strlen实例运行结果 三 strcmp实例运行结果 四 strcpy实例运行结果 五 stract实例运行结果 六 strchr实例运行结果 七 strstr 一 函数表 函数名函数功能strle
  • C语言—枚举

    枚举 枚举是一种用户定义的数据类型 xff0c 它用关键字 enum 以如下语法来声明 xff1a span class token keyword enum span 枚举类型名字 span class token punctuation
  • 将tensorflow训练好的模型移植到android

    将tensorflow训练好的模型移植到android上 说明 本文将描述如何将一个训练好的模型植入到android设备上 xff0c 并且在android设备上输入待处理数据 xff0c 通过模型 xff0c 获取输出数据 通过一个例子
  • C语言——结构体

    结构体 一 定义结构体二 声明结构体的形式第一种第二种第三种第四种第五种 三 结构体的初始化第一种运行结果 第二种运行结果 四 访问结构体成员五 结构体运算实例1运行结果 实例2运行结果 实例3运行结果 六 结构体指针实例1运行结果 实例2
  • 转置矩阵、对称矩阵、反对称矩阵以及向量的反对称矩阵

    一 转置矩阵 假设矩阵 A 如下表示 xff1a 则其转置矩阵表示为 xff1a 二 对称矩阵 若矩阵 B 与其转置矩阵相等 xff0c 则称矩阵 B 为对称矩阵 xff0c 如 xff1a 三 反对称矩阵 若矩阵 C 与其转置矩阵取负后相
  • Adobe Acrobat用鼠标滚轮浏览时滚动速度很慢解决办法

    点击 视图 页面显示 启用滚动
  • atan()函数与atan2()函数

    atan函数与atan2函数 一 atan 函数1 描述2 声明3 参数4 返回值5 头文件 二 atan2 函数1 描述2 声明3 参数4 返回值5 头文件 一 atan 函数 1 描述 表示 x 的反正切 2 声明 span class
  • vscode调整代码大小

    vscode调整代码大小 一 vscode整体放大二 只放大右侧的代码 一 vscode整体放大 依次点击 查看 外观 放大 xff0c 或者快捷键 Ctrl 43 61 二 只放大右侧的代码 依次点击 文件 首选项 设置 xff0c 或者
  • 计算机网络协议

    计算机网络协议 一 OSI七层协议二 TCP IP协议三 OSI与TCP IP总结四 数据的单位 一 OSI七层协议 OSI分层名称作用7应用层针对特定应用的协议 为应用程序提供服务并规定应用程序中通信相关的细节 包括文件传输 电子邮件 远
  • 删除 Microsoft Office Word 中页眉、页脚的横线

    一 问题描述 xff1a 上面有一条横线 二 解决办法 点击 开始 xff0c 再点击 样式 右下角的箭头 xff0c 或者直接快捷键 Alt 43 Ctrl 43 Shift 43 S 再点击 管理样式 打开之后 xff0c 根据自己的需
  • Latex画三线表

    Latex代码格式模板 begin span class token punctuation span table span class token punctuation span small span class token opera
  • VS Code(Visual Studio Code)中文注释乱码解决办法

    注释乱码 解决办法 xff1a 将设置中的 34 files autoGuessEncoding 34 项勾选上即可 结果
  • 显示远程计算机或设备将不接受连接的解决办法

    当你的电脑浏览器不能正常上网时 xff0c 显示 点击网络诊断 xff0c 显示远程计算机或设备将不接受连接 此时 xff0c 不要慌 解决办法 xff1a 1 右键点击左下角开始 xff0c 点击运行 xff0c 输入inetcpl cp
  • 错误报告规范

    PR 类型包括如下 类型范例BugFix BugFix 修正某个坏掉的功能HotFix HotFix 紧急修正某个奇怪的东西CS CS 修正 Coding StyleFeature Feature 写了某个新功能Update Update
  • Windows中使用7-Zip压缩或解压缩时报错解决:客户端没有所需的特权

    1 报错 2 解决办法 点击开始 xff0c 查看7 Zip 软件文件夹或者直接找到7 Zip 软件的安装路径 xff0c 电击以管理员身份运行 找到需要压缩或者解压缩的文件的位置 xff0c 完成 xff01
  • Spring Bean的配置方式

    在配置前先了解bean元素的相关属性 xff1a 作为 Spring 核心机制的依赖注入 xff0c 改变了传统的编程习惯 xff0c 对组件的实例化不再由应用程序完成 xff0c 转而交由Spring 容器完成 xff0c 在需要时注入应