Spring----最小化Spring配置
在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配置的更多相关文章
- Centos6.5生产环境最小化优化配置
Centos6.5生产环境最小化优化配置,满足业务需求! 01.启动网卡 #centos6.x最小化安装后,网卡默认不是启动状态 ifup eth0 // ifconfig eth0 up /et ...
- 2015年12月10日 spring初级知识讲解(二)最小化Spring XML配置 注解
序,随着Spring容器管理Bean数量增加,XML文件会越来越大,而且纯手工配置XML很繁琐,Spring和JAVA都提供了一些注解方式用以简化XML配置. 目录 一.自动装配(autowiring ...
- Spring学习笔记—最小化Spring XML配置
自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系. 自动 ...
- 最小化Spring XML配置
Spring提供两种技巧,可以帮助我们减少XML的配置数量. 1.自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg&g ...
- 【工具】之001-CentOS7 最小化安装配置
写在前面 我很懒,,,不想敲一个命令一个命令敲... "偷懒是有前提的,不是之前,就是之后." 简述 CentOS 7 最小化安装版本:CentOS-7-x86_64-Minima ...
- [Spring]04_最小化Spring XML配置
4.1 自动装配 Bean Spring 装配 bean 时,有时非常明确,就是需要将某个 bean 的引用装配给指定属性. 例如,若应用上下文中只有一个 javax.sql.DataSource 类 ...
- 最小化spring XML配置,Spring提供了4种自动装配策略。
1.ByName自动装配:匹配属性的名字 在配置文件中的写法: <bean name="course" class="course类的全包名">&l ...
- CentOS 7 最小化安装配置以及网络服务器搭建、配置与管理
一.环境介绍: 运行软件:VMware Workstation Pro 系统环境:CentOS-7-x86_64-1810 系统网络运行模式:NAT模式 二.操作配置: 1.配置动态获取IP 1) 修 ...
- VMware WorkStations最小化安装&配置&卸载CentOS 7
所需软件: VMware WorkStations,CentOS 7镜像文件(可以在CentOS官网下载) 1.打开VMware WorkStations,点击创建虚拟机 2.选择典型,点击下一步 3 ...
- 最小化Linux系统安装
安装CentOS 5.9 基于vbox虚拟机,虚拟机内存1 G,虚拟硬盘大小8 G 虚拟网卡使用host only方式 创建卷组centos 独立的boot分区 home, root和swap分区皆是 ...
随机推荐
- HLSL-高级着色语言简介【转】
HLSL-High Level Shader Language 优点 用来书写Vertex Shader和Pixel Shader程序的代码,语法类似于C/C++,在DirectX 8.x的时代,Sh ...
- 在AbpZero中hangfire后台作业的使用——hangfire的调度
在abpzero框架中,hangfiire通过依赖注入来进行接口的调用 hangfire的事件处理分为以下几种: 1.基于队列的任务处理(Fire-and-forget jobs) var jobId ...
- 【cocos2d-x 仙凡奇缘-网游研发(1) 登录&注册】
转载请注明出处:http://www.cnblogs.com/zisou/p/xianfan01.html 公司的项目总算告一段落了,年前憋到年后,总算要上线了,所以我也有了时间来搞我自己的游戏项目了 ...
- daemon_int
摘自 UNP #include "unp.h" #include <syslog.h> #define MAXFD 64 extern int daemon_proc; ...
- JavaScript基础数组_布尔值_逻辑运算等(2)
day51 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html 布尔值(Boolean) 区别于Python,true和false都是小写. var ...
- poj1511
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 25099 Accepted: 829 ...
- rocketmq学习
官网地址 安装name server和broker git clone https://github.com/apache/incubator-rocketmq.git cd incubator-ro ...
- [JavaScript] iframe加载完成事件
//iframe加载完成后,对其子元素进行操作 var iframe = document.getElementById("re-img"); if (iframe.attachE ...
- Android多媒体整体架构图
Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 ...
- CSS3盒子模型(中)
在CSS盒子模型(上)讲到了盒子模型的边框,内外边距,外边距合并等知识,接下来要总结的是盒子模型的布局常用到的一些CSS属性,比如:float.position等知识. 盒子模型布局稳定性 开始学习盒 ...