在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.

Spring----最小化Spring配置的更多相关文章

  1. Centos6.5生产环境最小化优化配置

    Centos6.5生产环境最小化优化配置,满足业务需求! 01.启动网卡 #centos6.x最小化安装后,网卡默认不是启动状态 ifup eth0  //  ifconfig eth0 up /et ...

  2. 2015年12月10日 spring初级知识讲解(二)最小化Spring XML配置 注解

    序,随着Spring容器管理Bean数量增加,XML文件会越来越大,而且纯手工配置XML很繁琐,Spring和JAVA都提供了一些注解方式用以简化XML配置. 目录 一.自动装配(autowiring ...

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

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

  4. 最小化Spring XML配置

    Spring提供两种技巧,可以帮助我们减少XML的配置数量. 1.自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg&g ...

  5. 【工具】之001-CentOS7 最小化安装配置

    写在前面 我很懒,,,不想敲一个命令一个命令敲... "偷懒是有前提的,不是之前,就是之后." 简述 CentOS 7 最小化安装版本:CentOS-7-x86_64-Minima ...

  6. [Spring]04_最小化Spring XML配置

    4.1 自动装配 Bean Spring 装配 bean 时,有时非常明确,就是需要将某个 bean 的引用装配给指定属性. 例如,若应用上下文中只有一个 javax.sql.DataSource 类 ...

  7. 最小化spring XML配置,Spring提供了4种自动装配策略。

    1.ByName自动装配:匹配属性的名字 在配置文件中的写法: <bean name="course" class="course类的全包名">&l ...

  8. CentOS 7 最小化安装配置以及网络服务器搭建、配置与管理

    一.环境介绍: 运行软件:VMware Workstation Pro 系统环境:CentOS-7-x86_64-1810 系统网络运行模式:NAT模式 二.操作配置: 1.配置动态获取IP 1) 修 ...

  9. VMware WorkStations最小化安装&配置&卸载CentOS 7

    所需软件: VMware WorkStations,CentOS 7镜像文件(可以在CentOS官网下载) 1.打开VMware WorkStations,点击创建虚拟机 2.选择典型,点击下一步 3 ...

  10. 最小化Linux系统安装

    安装CentOS 5.9 基于vbox虚拟机,虚拟机内存1 G,虚拟硬盘大小8 G 虚拟网卡使用host only方式 创建卷组centos 独立的boot分区 home, root和swap分区皆是 ...

随机推荐

  1. Spring Boot 2 实践记录之 MySQL + MyBatis 配置

    如果不需要连接池,那么只需要简单的在pom文件中,添加mysql依赖: <dependency> <groupId>mysql</groupId> <arti ...

  2. 使用SignalR 2进行服务器广播

    概述 在本教程中,您将创建一个股票代码应用程序,该应用程序代表您希望定期“推送”或广播从服务器到所有连接客户端的通知的实时应用程序.在本教程的第一部分中,您将从头开始创建该应用程序的简化版本.在本教程 ...

  3. 【大数据之数据仓库】kudu性能测试报告分析

    本文由  网易云发布. 这篇博文主要的内容不是分析说明kudu的性能指标情况,而是分析为什么kudu的scan性能会这么龊!当初对外宣传可是加了各种 逆天黑科技的呀:列独立存储.bloom filte ...

  4. linux 中定时执行python脚本

    一.让Python随Linux开机自动运行 准备好要自启的脚本auto.py 用root权限编辑以下文件 sudo vim /ect/rc.local 在exit 0上面编辑启动脚本的命令(编辑rc. ...

  5. poj2479 Maximum sum

    http://poj.org/problem?id=2479 题目大意:给定一组n个整数:a ={a1, a2,…,我们定义一个函数d(a)如下: 你的任务是计算d(A).输入由T(<=30)测 ...

  6. PHP中使用CURL模拟登录并获取数据实例

    cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...

  7. 【Hight Performance Javascript】——脚本加载和运行

    脚本加载和运行 当浏览器遇到一个<script>标签时,无法预知javascript是否在<p>标签中添加内容.因此,浏览器停下来,运行javascript代码,然后继续解析. ...

  8. Centos7安装Chacha20加密算法 (验证成功)

    Centos7安装Chacha20加密算法 (验证成功) 有些程序会使用Chacha20加密算法,如果Centos7系统报错Exception: libsodium not found,则缺乏M2Cr ...

  9. 1. Python中如何使用其他语言?(python的胶水作用,python又叫胶水语言)

    1. python中如何插入C语言运行? (1)编写C语言代码: #include<stdio.h> void CFun() { printf("---------我是c语言:- ...

  10. iOS---UICollectlionView 的使用

    UICollectlionView继承自UIScrollerview,跟tableview的使用很相似. 下面是UIcollectionView的一些属性和代理方法. #import "Vi ...