最小化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,并登 ...
随机推荐
- C#3.0导航
C#3.0主要特性 智能的编译器 编译器,背后的默默付出者 Lamdba表达式与表达式树 匿名方法的革命 扩展方法 优雅的对类进扩展 (待完成) LINQ 还有这种操作? (待完成)
- 解决Springboot 的ajax跨域问题-动静分离
@SpringBootApplication public class FsSysApiApp { public static void main(String[] args) { SpringApp ...
- Kali 无法正常上网问题
有时候我们会突然发现我们的kali不能够正常上网,在终端使用ping 命令对其进行检查,显示网络不可达, 然后使用ifconfig,可以看到没有正在工作的网卡,只有localhost 接着使用ifco ...
- [三]JavaIO之IO体系类整体设计思路 流的概念以及四大基础分类
从本文开始,将正式进入JavaIO的简介 在继续javaIO系列的文章之前 可以过去看一下 本人博客上的设计模式中的 适配器模式和装饰器模式 这会对接下来的阅读大有帮助 本文是从逻辑上介绍整个的J ...
- 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(3)- Serial Downloader模式(sdphost/MfgTool)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial Downloader模式. 在上一篇文章 Boot配置(BOOT Pin, eFUSE) ...
- JavaScript 脚本运行方式
引用外部脚本文件 <script src="/path/to/example.js"></script> 页面内联式 <script> aler ...
- C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签
概要 书签的设置可以帮助我们快速的定位某段文字,使用起来很方便,也很节省时间.在前一篇文章“C# 如何添加/删除Word书签”中介绍了插入.删除书签的方法,本篇文章将对C# 操作Word书签的功能做进 ...
- 结合JDK源码看设计模式——简单工厂、工厂方法、抽象工厂
三种工厂模式的详解: 简单工厂模式: 适用场景:工厂类负责创建的对象较少,客户端只关心传入工厂类的参数,对于如何创建对象的逻辑不关心 缺点:如果要新加产品,就需要修改工厂类的判断逻辑,违背软件设计中的 ...
- Android开发——使用LitePal开源数据库框架
前言:之前使用Android内置的数据库,感觉一大堆SQL语句,一不小心就错了,很难受,学习了这个LItePal的开源数据库框架,瞬间觉得Android内置的数据库简直是垃圾般的存在 LitePal ...
- CSS 渐变色
CSS linear-gradient() 函数 http://www.runoob.com/cssref/func-linear-gradient.html CSS radial-gradient( ...