Spring IOC 容器的依赖注入工作可以分为两个阶段。第一个阶段可以认为是构建和收集 Bean 定义的阶段,在这个阶段中,我们可以通过 xml 或者 Java 代码的方式定义一些 Bean,然后通过手动组装或者让容器基于某种规则自动扫描的形式,将这些 Bean 定义收集到 IOC 容器中。下面是以XML配置的形式来注册一些 Bean

<!-- 声明一个 JavaBean -->
<bean id="foo" class="com.vincent.spring.Foo"/><!-- 声明一个 JavaBean 并注入构造参数 -->
<bean id="dataSource" class="com.vincent.spring.DataSource"><constructor-arg value="root"/><constructor-arg value="root"/>
</bean><!-- 指定参数名称进行装配 -->
<bean id="dataSource" class="com.vincent.spring.DataSource"><property name="username" value="root"/><property name="password" value="root"/>
</bean><!-- 装配构造函数参数是 List 类型的 JavaBean -->
<bean id="foo" class="com.vincent.spring.Foo"><constructor-arg><list><value>100</value><value>200</value><value>300</value></list></constructor-arg>
</bean><!-- 装配构造函数参数是 Set 类型的 JavaBean -->
<bean id="foo" class="com.vincent.spring.Foo"><constructor-arg><set><value>100</value><value>200</value><value>300</value></set></constructor-arg>
</bean>
复制代码
// 声明一个组件
@Component// 声明一个组件并设置它的ID
@Component("foo")
复制代码
// 自动装配一个 JavaBean
@Resource// 装配指定ID的 JavaBean
@Resource("foo")// 通过构造函数装配 JavaBean
public class Foo {private Bar bar;@Autowiredpublic Foo(Bar bar) {this.bar = bar;}
}// 忽略没有找到的 JavaBean,但是这样做容易抛出 NPE
@Resource(required = false)
复制代码

如果觉得逐个收集 Bean 定义麻烦,想批量的将 Bean 收集并注册到容器之中,我们也可以配置批量扫描注册 Bean 的方式进行。下面分别是基于 XML 和 Java 配置的方式进行批量注册。

<!-- 扫描一个或多个制定包下的组件 -->
<!-- 与 Java 配置不同,使用 XML 配置必须指定扫描包的范围 -->
<context:component-scan base-package="com.vincent.spring.framework.example"/>
复制代码
// 自动扫描当前包下的组件
@ComponentScan// 扫描一个或多个制定包下的组件
@ComponentScan(basePackages = { "com.vincent.spring.framework.example.web", "com.vincent.spring.framework.example.service"
})// 扫描指定类所在的包
@ComponentScan(basePackageClasses = com.vincent.spring.framework.example.SpringContextConfig.class)
复制代码

当 Bean 都已经成功注册到 IOC 容器中后,IOC 容器会分析这些 Bean 之间的依赖关系,根据他们之间的依赖关系先后组装它们。比如 IOC 容器发现 JdbcCTemplate 这个 Bean 依赖于 dataSource,它就会将这个 Bean 注入给依赖它的那个 Bean 直到所有的 Bean 都依赖注入完成。至此,所有的 Bean 都组装完成。

代码案例:spring-framework-bean-example

Spring Bean 装配和依赖注入相关推荐

  1. 一步一步手绘Spring DI运行时序图(Spring 自动装配之依赖注入)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  2. Spring(二)--------Spring配置、DI依赖注入、Bean自动装配

    Spring(二)--------Spring配置.DI依赖注入.Bean自动装配 5.Spring配置 5.1 别名 设置别名:第一种方式alias <!--其中name为ID的对应值--&g ...

  3. Spring IOC容器的依赖注入流程(收集和注册、分析和组装)

    Spring IOC容器的依赖注入流程 Spring IOC容器的依赖注入工作可以分为两个阶段: 阶段一:收集和注册 第一个阶段可以认为是构建和收集bean定义的阶段,在这个阶段中,我们可以通过XML ...

  4. 回客科技 面试的 实现ioc 容器用到的技术,简述BeanFactory的实现原理,大搜车面试的 spring 怎么实现的依赖注入(DI)...

    前言:这几天的面试,感觉自己对spring 的整个掌握还是很薄弱.所以需要继续加强. 这里说明一下spring的这几个面试题,但是实际的感觉还是不对的,这种问题我认为需要真正读了spring的源码后说 ...

  5. Spring的核心机制依赖注入简介

    Spring能有效地组织J2EE应用各层的对象.不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的管理下有机地协调.运行.Spring将各层的 ...

  6. 关于mysql注入说法正确的是_1. 在 Spring中,下列关于 依赖注入 的 说法 , 正确的是( ) 。_学小易找答案...

    [简答题]1基本流程练习 2时间轴嵌套 3简单应用 [简答题]请解释什么是MVC? [多选题]在 Hibernate 中,下 列 说法正确的有 [多选题]1. 关于 Spring,下列说法不正确的是( ...

  7. Spring 的控制反转/依赖注入

    第一章 Spring 的控制反转/依赖注入 回顾 增删改查. 课前测: 本章内容 spring:春天 IOC:将创建对象的权力交给 spring 核心容器去控制.工厂模式 BeanFactory: 懒 ...

  8. Spring Bean装配(上)

    Bean:在spring的IOC里面,把配置到IOC容器里面的实体或者是对象都称为Bean Bean配置项 Bean的作用域 Bean的生命周期 Bean的自动装配 Resources&Res ...

  9. Spring使用注解配置依赖注入

    大部分情况下,使用Spring配置依赖注入时,都是使用注解来进行配置,因为注解比xml要方便和简单.不过类似于数据源对象这种配置信息容易变更的对象除外,这种对象使用xml文件来进行配置会更适合,方便于 ...

最新文章

  1. 检查linux是否安装zlib,Linux下安装zlib
  2. 关于异常的处理的总结
  3. mysql connector 5.5_升级mysql-connector 5到8遇到的问题
  4. 如何在SharePoint2007中实现下拉列表(DropDownList)的级联菜单效果
  5. webchart= php 解码,Web Pages - Chart 帮助器
  6. [Array]Pascal's Triangle II
  7. kafka数据文件.log
  8. 金融情报挖掘:面向公开文本的期货事件聚合与传导因素分析
  9. Mysql 使用正则表达式
  10. linux输入influxdb密码,influxdb开启身份验证
  11. 安装两个mysql3308_在同一台机器上安装两个版本的MySQL
  12. Java随机生成红色_Java生成图片红色问题
  13. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_13-页面静态化-数据模型-轮播图DataUrl接口...
  14. 毕设题目:Matlab手写或印刷数字字母识别
  15. python批量识别二维码图片_python+selenium 识别二维码
  16. cmd安装pip以及第三方库的最简单的安装方法
  17. 数学基础一:直线方程Ax+By+C=0
  18. 网联V2X测试解决方案
  19. xshell远程连接不到服务器,Xshell远程连接服务器失败解决方法。
  20. ios 视频选择封面功能

热门文章

  1. Android自定义旋钮效果,Android自定义悬浮按钮效果实现,带移动效果
  2. 热榜第四:GitHub开源代码数据集界ImageNet,推出代码搜索挑战赛
  3. 滴滴自动驾驶,现在是一个怎样的“富二代”创业项目?
  4. Spring Boot项目利用MyBatis Generator进行数据层代码自动生成
  5. Jmeter也能IP欺骗!
  6. Oracle12c 从入门到精通(第二版) 闫红岩 金松河 编著
  7. Web Service 概念
  8. angular(3)服务 --注入---自定义模块--单页面应用
  9. 【推荐】R for Data Science 新书抢先看
  10. parted命令分区