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 ...
随机推荐
- hdu1524博弈SG
A Chess Game Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- SUM游戏
题意:就是有一个长度为n的整数序列,两个游戏者A和B轮流取数,A先取.每次玩家只能从左端或者右端取任意数量个数,但不能两端都取. 所有数都被取走后游戏结束,然后统计每个人取走的所有数之和,作为各自的得 ...
- I/P/B/SI/SP帧和PTS/DTS的关系
I frame:帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象.I帧可以看成是 ...
- Python实战之实现简单的购物车系统
#!usr/bin/env Python3 # -*-coding:utf-8-*- # 程序:购物车程序 # # 需求: # # 启动程序后,让用户输入工资,然后打印商品列表 # 允许用户根据商品编 ...
- struts2-学习笔记(三)
Struts2 学习笔记(三) 1.ognl概述: OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用O ...
- bootstrap 轮播模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- memcached讲解
Memcached 最近空闲的是时候研究了一下缓存,根据公司环境对缓存进行了系统的了解,我们使用memcacheed进行缓存,下面结合我的 理解,以及网上的相关资料,memecached进行讲解. m ...
- DevOps之软件定义网络SDN
唠叨话 关于德语噢屁事的知识点,仅提供专业性的精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. <软件定义网络SDN(Software Defined Network)> 关于软 ...
- iOS代码处理横屏问题
借助通知来控制界面的横竖屏切换.还是整个App中大部分界面都是竖屏,某个界面可以横竖屏切换的情况. 首先,在[General]-->[Device Orientation]设置仅支持竖屏,lik ...
- selenium python grid
学习自动化一直都是在本机操作,感觉这样能够减少工作量确实很少.最近研究了一下分布式操作. 开始的想法是,我在一台机器上启动脚本,然后让脚本在不同机器的不同版本的浏览器上进行跑脚本. 需要准备的东西: ...