在Spring的配置文件中,我们可以使用<bean>元素定义Bean,以及使用<constructor-arg>或着<property>元素装配bean,这对于包含少量Bean的应用来说以经非常不错了,但是随着应用的发展,我们不得不编写越来越复杂的XML配置。
为解决这个问题,Spring提供了几种技巧,可以帮助我们简化XML的配置。

  • 自动装配:有助于减少甚至消除<constructor-arg>和<property>元素,让Spring自动识别如何装配Bean的依赖关系
  • 自动检测:比自动装配更进一步,让Spring能够自动识别哪些类需要被装配成Spring bean,从而减少对<bean>元素的使用。

我们首先 举一个例子:
1.创建一个Singer类:

2.创建一个Instruments类继承Instrument接口

3.创建一个Singer.xml文件:

4.测试方法:

5.运行结果

为了简化上面案例的xml文件配置,我们可以通过一下四种自动装配Bean的方案来实现
(1)byName自动装配
在Spring中,所有的东西都会赋予一个名字,因此Bean的属性也会有名字,加入属性的名字刚好与要被装配到该属性的Bean的名字相同,那么Spring便可以通过byName的方式,将该Bean自动装配到对应属性中。

运行结果:

注意 :若时xml文件中存在多个Singer的bean,且均已byName的形式自动装配,那么所有的Singer类装配的均为同一个instrument。
若配置了byName自动装配,而却没有id为instrument的bean,则Singer中instrument为空。

(2)byType自动装配
其工作方式类似于byName自动装配,只不过不是匹配名字,而是检查属性的类型。

运行结果:

注意:如果存在多个bean与需要装配的属性的类型都一致,那么Spring不会猜测那个bean更适合,而是选择抛出异常。例如:

(3)constructor 自动装配
如果我们要通过构造器来注入bean,可以通过设置autowire="constructor" 来取代
<constructor-arg>元素。Spring会自动匹配一个构造器所有入参的bean,并自动注入。
注意:constructor 自动装配和byType自动装配具有相同的局限性,当发现多个Bean匹配某个构造器的入参时,Spring不会尝试猜测哪个Bean更适合自动装配,此外,如果一个类有多个构造器,且都满足自动装配条件时,Spring也不会尝试判断哪个构造器更适合使用。
(4)最佳自动装配
如果我们将autowire的属性设置为autodetect,那么Spring便会为我们选择最佳的自动装配类型。
Spring会首先尝试使用constructor自动装配,如果没有发现类型匹配的bean,将会尝试byType自动装配。

使用注解装配
在使用基于注解装配前,我们需要在Spring配置中去启用他。

使用 @Autowired实现在动装配
当我希望使用@Autowired让Spring自动Singer,我们可以在需要装配的属性对应的set方法上添加

@Autowired注释。例如:

结果:

@Autowired 不仅可以用于标注set方法,还可以用来标注需要自动装配Bean的任意方法。包括构造方法。放@Autowired对构造方法进行标注时,在Spring的XML文件中即使没有使用<constructor-arg>元素配置Bean,该构造器也会进行自动装配

@Autowired还可以标注类的属性,删除set方法。

运行结果:

注意:@Autowired所标注的属性,必须时可装配的,如果没用Bean可以装配到@Autowired所标注的属性中,便会抛出异常。

让Spring尽早失败,要好于在以后抛出空指针异常。

有时候属性不一非要装配,null值也是可以的,我们可以使用@Autowired的required属性为false来配置自动装配是可选的。

若required的值为false,当不存在可以装配的Bean时,该属性配装配为null.

转载于:https://www.cnblogs.com/red-evil/p/10058493.html

Spring----最小化Spring配置相关推荐

  1. Spring学习笔记—最小化Spring XML配置

    自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系. 自动 ...

  2. CentOS7最小化安装配置IP

    CentOS7配置IP: 因为是我们安装的CentOS操作系统是最小化安装的,所以没有图形界面和一些软件或插件的.IP也是没有配置的我们需要手动配置IP,然后使用远程终端通过这个IP去连接操作系统,在 ...

  3. 第三章 最小化SpringXml 配置

    自动装配(autowiring):有助于减少甚至消除<property>元素和<constructor-arg>元素,让spring自动识别如何装配Bean的依赖关系. 自动检 ...

  4. 让Spring架构减化事务配置(转)

    让Spring架构减化事务配置(转) 注:原文章曾发表在it168   Spring颠覆了以前的编程模式,引入了IOC等全新的概念,广受大家的喜爱.目前大多数j2ee项目都已经采用Spring框架.S ...

  5. Spring Boot自动配置与Spring 条件化配置

    SpringBoot自动配置 SpringBoot的自动配置是一个运行时(应用程序启动时)的过程,简化开发时间,无需浪费时间讨论具体的Spring配置,只需考虑如何利用SpringBoot的自动配置即 ...

  6. Spring JDBC-使用XML配置声明式事务

    系列 概述 基于aop/tx命名空间的配置 示例 tx:method元素属性 系列 Spring对事务管理的支持概述以及 编程式的事务管理 Spring JDBC-使用XML配置声明式事务 Sprin ...

  7. spirng: srping mvc配置(访问路径配置)搭建SpringMVC——最小化配置

    搭建SpringMVC--最小化配置 最开始接触网页的时候,是纯的html/css页面,那个时候还是用Dreamweaver来绘制页面. 随着网站开发的深入,开始学习servlet开发,记得最痛苦的就 ...

  8. spring cloud ,spring boot application.properties 配置属性列表

    #横幅 banner.charset = UTF-8#横幅文件编码. banner.location = classpath:banner.txt#横幅文件位置. banner.image.locat ...

  9. Spring cloud config 分布式配置中心(一) 服务端

    作用: 为分布式系统中的基础设施和微服务应用提供外部集中化的配置支持,分客户端和服务端 服务端: 即分布式配置中心,是一个独立的微服务应用,连接配置仓库,为客户端提供一些访问接口,如加密 / 解密信息 ...

  10. spring事务管理-xml配置aop事务(重点)

    刚才咱们是使用了模板操作咱们事务,当然使用模板操作比较low,还得写代码,每个方法都写太费劲了,首先把之前写的先注释掉,把这个transfer这个代码直接复制一份,然后底下展一份,留着注释掉就行了,上 ...

最新文章

  1. Elasticsearch的前后台运行与停止(rpm包方式)
  2. MVTN:用于3D形状识别的多视图转换网络(ICCV2021)
  3. Java异常机制及异常处理建议
  4. 光流 | 基于KLT(Kanade-Lucas-Tomasi)特征点跟踪算法(附代码,可扩展)
  5. SAP FSM 学习笔记(一) : 使用API消费FSM的数据
  6. aspx,ascx和ashx使用小结
  7. org.springframework.beans.factory.BeanDefinitionStoreExcept
  8. 神奇的判断数组名和指针的区别
  9. Android Studio (6)---Gradle
  10. python与冒泡排序
  11. 4.1 选择IDC机房 4.2 硬件服务器选型 4.3 上架服务器 4.4/4.5 装系统
  12. 三十一、K8s供应链安全2 - 镜像的检测及优化与yaml文件安全
  13. Centos 安装 Oracle Java JDK
  14. 3796.凑平方-AcWing题库
  15. 水面船舶雷达监视-信天翁雷达监视系统
  16. OBS 直播、录屏软件下载安装操作教程
  17. 实现uniapp 内部下载apk文件和安装
  18. Day754.Pika键值对数据库 -Redis 核心技术与实战
  19. 使用Python中的matplotlib将多个图片显示到一张图内
  20. codeforces-26A-Almost Prime【分解质因数】

热门文章

  1. Sublime Text for Mac的快捷键
  2. 冀教版五年级计算机教学计划,冀教版五年级上册教学计划资料
  3. 用matlab解一维单势垒波函数,一维多势垒结构准束缚态的MATLAB分析计算
  4. C语言怎么合并两个有序链表
  5. action mutation 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...
  6. python turtle画彩虹的代码_如何用python海龟库画彩虹
  7. 为什么jupyterlab运行程序的时候会自动停止_气象人的JupyterLab
  8. 如何在虚拟linux环境运行python_Conda(Python)虚拟环境不能从Windows移植到Linux
  9. php能打开.shp文件吗,shp文件是什么格式的
  10. 1044 火星数字 PAT乙级 (C++)