最小化spring XML配置,Spring提供了4种自动装配策略。
1.ByName自动装配:匹配属性的名字
在配置文件中的写法:
<bean name="course" class="course类的全包名"></bean>
<bean name="student" class="student类的全包名" autowire="byName"></bean>
注:spring会发现course属性可以通过setter注入来进行自动装配。
在ByName中注入可以省略一下的设置:<property name="stuName" value="张三"></property>
2.byType自动装配:是检查属性的类型
<bean name="course2" class="类的全包名" primary="true"></bean>
<bean name="course3" class="类的全包名" primary="false" autowire-candidate=false></bean>
<bean name="student" class="类的全包名" autowire="byType"></bean>
注:spring会发现course属性可以通过setter注入来进行自动装配。
autowire="byType":设置byType自动装配
primary="true":在多个类型的bean中,以有此设置的为主。
autowire-candidate=false:在多个类型的bean中,以有此设置排除某些Bean
3.constructor自动装配
<bean name="course" class="course类的全包名"></bean>
<bean name="student" class="student类的全包名" autowire="constructor"></bean>
注:spring会发现course属性可以通过构造函数注入来进行自动装配。
4.默认自动装配:
在命名空间(就是最上面的xml里面)中对注入进行定义,则这个配置文件默认都会采用这个方式进行装配
5.混合使用自动装配和显示装配
对某个Bean选择了自动装配策略,并不代表不能对该Bean的其他属性进行显示装配。
例如:
<bean id="" class="" autowire="byType">
<property name="" ref="" />
</bean>
即采用了ByName也采用了ByType
6.使用注解装配:@Autowired(重点)
默认情况下,@Autowired具有强契约特征,其所标注的属性或参数必须是可装配的。如果没有Bean可以装配到@Autowired所标注的属性或参数中,自动装配就会失败并会抛出NullPointException异常。
属性不一定非要装配,null值也是可以接受的。可以通过设置@Autowired的required属性为false来配置自动装配是可选的。
@Autowired(required=false)
private Object obj;
注意:required属性可以用于@Autowired注解所使用的任何地方。但是当使用构造器装配时,只有一个构造器可以将@Autowired的required属性设置为true。其他使用@Autowired注解所标注的构造器只能将required属性设置为false。
- 限定歧义性的依赖
另一方面,问题或许在于spring并不缺少适合自动装配的Bean。可能会有足够多的Bean都完全满足装配条件,并且都可以被装配到属性或参数中。
为了帮助@Autowired鉴别出哪一个Bean才是我们所需要的,可以配合使用spring的@qualifier注解。
例如:为了确保spring为Bean选择吉他(guitar)来演奏,即使有其他Bean也可以装配到instrument属性中,但可以使用@qualifier来明确指定名为guitar的Bean。
@Autowired
@qualifier("quitar")
private Instrument instrument;
@qualifier注解将尝试注入ID为guitar的Bean。
最小化spring XML配置,Spring提供了4种自动装配策略。的更多相关文章
- [Spring]04_最小化Spring XML配置
4.1 自动装配 Bean Spring 装配 bean 时,有时非常明确,就是需要将某个 bean 的引用装配给指定属性. 例如,若应用上下文中只有一个 javax.sql.DataSource 类 ...
- 2015年12月10日 spring初级知识讲解(二)最小化Spring XML配置 注解
序,随着Spring容器管理Bean数量增加,XML文件会越来越大,而且纯手工配置XML很繁琐,Spring和JAVA都提供了一些注解方式用以简化XML配置. 目录 一.自动装配(autowiring ...
- 最小化Spring XML配置
Spring提供两种技巧,可以帮助我们减少XML的配置数量. 1.自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg&g ...
- 三、最小化的Spring XML配置
Spring 提供了自动装配(自动识别如何装配Bean的依赖关系)和自动检测(检测哪些类需要被配置成Spring Bean) 1.自动装配Bean的属性 1.1四种类型得自动装配:byName.byT ...
- Spring学习笔记—最小化Spring XML配置
自动装配(autowiring)有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系. 自动 ...
- 基于XML配置Spring的自动装配
一.了解Spring自动装配的方式 采用传统的XML方式配置Bean组件的关键代码如下所示 <bean id="userMapper" class="edu.cn. ...
- spring boot系列(五)spring boot 配置spring data jpa (查询方法)
接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnb ...
- spring xml配置标签详解
<!-- 指定类的名称 在对bean进行定义时,除了使用id属性来指定名称之外,为了提供多个名称,可以使用alias标签来指定. --> <alias name="&quo ...
- XML配置spring session jdbc实现session共享
概述 session的基础知识就不再多说. 通常,我们会把一个项目部署到多个tomcat上,通过nginx进行负载均衡,提高系统的并发性.此时,就会存在一个问题.假如用户第一次访问tomcat1,并登 ...
随机推荐
- Lottie 动画里有图片怎么办?设计师小姐姐也能帮你减少开发量!
一.序 Hi,大家好,我是承香墨影! Lottie 是 Airbnb 开源的一套跨平台的完整解决方案,设计师只需要使用 After Effectes (之后简称 AE)设计出动画之后,使用 Lotti ...
- .NET代码树执行时间计时器
有很多时候我们需要对代码不同段计算一个执行时间,并希望通过节点树的方式表达现每段代码的执行时长.在.Net下似乎找不到这样一个功能类,所以花了一些时间实现这样一个代码运行计时器.首先看一下简单的需求. ...
- 设计模式总结篇系列:建造者模式(Builder)
关于建造者模式网上有很多文章,也有些不同的理解.在此结合网上其他文章对建造者模式进行总结. 总体说来,建造者模式适合于一个具有较多的零件(属性)的产品(对象)的创建过程.根据产品创建过程中零件的构造是 ...
- PE知识复习之PE的RVA与FOA的转换
PE知识复习之PE的RVA与FOA的转换 一丶简介PE的两种状态 首先我们知道PE有两种状态.一种是内存展开.一种是在文件中的状态.那么此时我们有一个需求. 我们想改变一个全局变量的初始值.此时应该怎 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增记录SQL执行过程
有时我们需要记录整个系统运行的SQL以作分析,特别是在上线前这对我们做内部测试也非常有帮助,当然记录SQL的方法有很多,也可以使用三方的组件.3.2版本我们在框架底层新增了记录框架运行的所有SQl过程 ...
- mysql数据库备份并且实现远程复制
一.实现ssh 远程登陆 机器环境: 192.167.33.108 clent 用户:crawler 192.167.33.77 server 用户:crawler 1.客户端 生成密钥 /home/ ...
- Docker系列08—搭建使用私有docker registry
本文收录在容器技术学习系列文章总目录 1.了解Docker Registry 1.1 介绍 registry 用于保存docker 镜像,包括镜像的层次结构和元数据. 启动容器时,docker dae ...
- DAL分页
using System;using System.Collections.Generic;using LModel.DTO;using Newtonsoft.Json;using System.Da ...
- vue.js引入
开始学习vue.js,引入vue.vue.js一定要在head里面引入,实际开发中我们可能在body中引入,但是可能存在抖屏现象. 为了避免出现抖屏现象,我们引入vue.js或者jquery.js 最 ...
- 2019-02-10 扩展Python控制台实现中文反馈信息
"中文编程"知乎专栏原文地址 参考了周蟒的实现, 运行效果如下: $ python3 解释器.py Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 ...