Spring学习日志之Bean的装配
Spring容器负责创建应用程序中的bean并通过依赖注入来协调这些对象之间的关系。但是,作为开发人员,要告诉Spring需要创建哪些bean并且如何将其装配在一起。当描述bean如何装配时,Spring提供了两种主要的配置方式。
基于Java的配置
隐式配置
Spring通过组件扫描来实现隐式配置。
组件扫描
- 如果在类上使用了
@Component注解,则表明该类会作为组件类,并告知Spring要为这个类创建bean。 - 组件扫描默认不开启,需要在配置类上使用
@ComponentScan注解。默认情况下@ComponentScan会扫描与配置类相同的包。任何这个包以及这个包下的所有子包中带有@Component注解的类都会被扫描。 - 可以为
@ComponentScan设置basePackages属性来显式指定要扫描的基础包。指定时有三种实现方式:- 以
String的形式来指定 -@ComponentScan(basePackages="myPackage")。此方式类型不安全,重构代码后指定的基础包可能会出现错误。 - 指定为包中所含的类或接口 -
@ComponentScan(basePackages="Student.class")。 - 创建一个用来进行扫描的空标记接口。(推荐)
- 以
- 使用了
@Component注解的会得到一个类名首字母小写的bean ID。
显式配置
有些时候是不太适合使用隐式装配的,比如要将第三方库中的组件装配到自己的代码的时候。
- 需要为配置类添加一个
@Configuration注解,表明该类是一个配置类,包含了如何Spring容器如何创建bean的细节。 - 要在配置类中声明bean,需要编写一个带有
@Bean注解的方法,这个方法会创建所需类型的实例并返回。@Bean注解会告诉Spring该方法将会返回一个对象,该对象要注册成为Spring应用上下文中的bean,方法体中包含了产生bean实例的逻辑。 - 默认情况下,生成的bean ID和带有
@Bean的方法的方法名相同。 - 对带有
@Bean注解的方法的所有调用都会被Spring拦截,以此确保会直接返回该方法所创建的bean,而不是每次都对其进行实际调用。 - 可以在配置类中直接引用其它的bean而不需加
@autowired注解。
自动装配
简单来说,自动装配就是让Spring自动满足依赖的一种方法,在满足依赖的过程中,会在Spring上下文中寻找所需要的其它bean。为了声明要进行自动装配,可以使用@Autowired注解。
@Autowired注解可以用在类的任何方法上。@Autowired会根据所需bean的类型来进行搜索。- 如果没有匹配的bean,那么Spring将会抛出一个异常。为了避免异常的出现,可以将
@Autowired的required属性设置为false。 - 在声明bean时,可以为其中一个可选的bean添加
@Primary注解来标记其为首选,从而避免自动装配时多个bean可以选的歧义性。
Spring学习日志之Bean的装配的更多相关文章
- Spring学习记录(三)---bean自动装配autowire
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,少写几个ref autowire: no ---默认情况,不自动装配,通过ref手动引用 byName---根据 ...
- Spring学习--xml 中 Bean 的自动装配
Spring IOC 容器可以自动装配 Bean. 只要在 <bean> 的 autowire 属性里指定自动装配的模式. byName(根据名称自动装配):必须将目标 Bean 的名称和 ...
- Spring4学习笔记 - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
1 Autowire自动装配 1.1 使用:只需在<bean>中使用autowire元素 <bean id="student" class="com.k ...
- Spring学习笔记--注入Bean属性
这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; im ...
- Spring学习(三)—— 自动装配案例分析
Spring_Autowiring collaborators 在Spring3.2.2中自动装配类型,分别为:no(default)(不采用自动装配).byName,byType,construct ...
- Spring MVC系列-(2) Bean的装配
2. Bean的装配 Spring容器负责创建应用程序中的bean,并通过DI来协调对象之间的关系.Spring提供了三种主要的装配机制: XML显式配置: Java配置类进行显式配置: 隐式的bea ...
- Spring学习笔记(3)——Bean的注入方式
依赖注入 依赖注入支持属性注入.构造函数注入.工厂注入. 属性注入: 属性注入即通过setXxx()方法注入Bean的属性值或依赖对象 属性注入要求Bean提供一个默认的构造函数(无参构造函数),并为 ...
- spring学习(03)之bean实例化的三种方式
bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构 ...
- Spring学习之旅(四)--高级装配Bean
条件化 bean 有时候我们要满足某种情况才将bean 初始化放入容器中. 基于环境初始化不同的 bean 1.申明接口并创建两个实现类 public interface Teacher { void ...
随机推荐
- 实例讲解webpack的基本使用第四篇
这一篇来讲解一下webpack的loader的使用,用webpack打包文件,css,img,icon等都需要下载安装对应的loader文件,并且写好配置项,才可以进行打包,废话不多说,直接开始实战. ...
- Java历程-初学篇 Day09 冒泡排序
冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是 ...
- ZOJ1654 Place the Robots
Zoj1654 标准解法:二分匈牙利. 写法各异嘛,看不懂或者懒得看也正常,如果想了解我思路的可以和我讨论的. 在练习sap,所以还是写了一遍: #include<cstdio> #inc ...
- BaseServlet,让一个servlet处理多个请求
BaseServlet 第一次学习servlet的时候是跟着传智播客免费的教学视频,其中崔希凡讲的是我学过自认讲的最好的一位,BaseServlet也是跟着他写过一次,当时很多东西不能理解,后来慢慢发 ...
- Javascript从“繁”到“简”进行数组去重
随着JavaScript提供语法的增多,数组去重方式也越来越多.现在从最原始的方式到最简洁的方式,一步步进行剖析. 双重循环 数组去重,不就是比较数组元素,去掉重复出现的么.最原始的方式不正是双重循环 ...
- PHP 注释 数据类型 变量的定义/输出 类型的获取/转换 可变变量
注释方法: 1,单行注释: // 2, 多行注释: /* */ 二,数据类型 1,integer(整数型):在三十二位操作系统中它的有效范围是:-2147483648~+2147 ...
- Python学习笔记(六)
Python学习笔记(六) Ubuntu重置root密码 Ubuntu 16.4 目录结构 Ubuntu 命令讲解 1. Ubuntu重置root密码 启动系统,显示GRUB选择菜单(如果默认系统启动 ...
- java中 n-- 和 --n的区别
n--和--n的最终结果都是将n本身减一,区别是现在的值: 比如说: n=10 a=n;此时a=10 b=n--;此时b=10,n=9减号放后面是指先赋值,再自减1 c=--n;此时c=8,n=8减号 ...
- linux 投影仪
注:文章转自http://goo.gl/aI9Ycd如果侵权,请原作者留言,立即删除 之前在 R219 做 C++ 演講的時候,發現 Ubuntu 沒有辦法使用 VGA 輸出,臨時改用 Windows ...
- (转)UML类图与类的关系详解
转载自:http://www.uml.org.cn/oobject/201104212.asp 在画类图的时候,理清类和类之间的关系是重点.类的关系有泛化(Generalization).实现(Rea ...