一.前言 写这篇博文的主要目的如下: 通过相关类和接口分析IoC容器到底长什么样. 阐述笔者对Spring上下文和容器的理解. 介绍重要的类辅助理解SpringBoot的启动流程. 二.Spring IoC容器的设计 看看下面这张图(摘自<Spring技术内幕>),IoC容器的设计分为两条线,  BeanFactory ==> HierarchicalBeanFactory ==>ConfigurableBeanFactory ,这条线可以理解成IoC容器的设计路线.  BeanF…
前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean. 版本说明 声明POM文件,指定需引入的JAR. <properties> <spring.version>4.0.9.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>jav…
本文的目标:从实现的角度来认识SpringIoC容器. 观察的角度:从外部接口,内部实现,组成部分,执行过程四个方面来认识SpringIoC容器. 本文的风格:首先列出SpringIoC的外部接口及内部实现所涉及到的组件列表:其次介绍组件之间的相互关系以对整个执行过程有所把握:然后针对每一个组件的简单介绍,包括组件的类结构图,核心功能描述,重要接口的重要方法描述:接下来看SpringIoC容器实现对面向对象基本设计原则的遵守:最后是后记部分. 术语约定:组件:本文中的组件是指在功能概念上具有相对…
在Spring Ioc容器的设计中,有俩个主要的容器系列:一个是实现BeanFactory接口的简单容器系列,这系列容器只实现了容器最基本的功能:另外一个是ApplicationContext应用上下文,他作为容器的高级形态而存在. 1 Ioc 容器系列 IOC容器为开发者管理对象之间的依赖关系提供了很多便利和基础服务. 什么是IOC容器?它在Spring容器中到底长什么样? 对于IOC容器的使用者来说,我们经常接触到的BeanFactory和ApplicationContext都可以看成是容器…
1 概述 1.1 依赖反转模式 在Java中,一个复杂的功能一般都需要由两个或者两个以上的类通过彼此合作来实现业务逻辑的,这使得每个对象都需要与其合作的对象的引用.如果这个获取依赖对象的过程需要自己去实现,那么这将导致代码的高度偶尔并且难以测试. 依赖反转就是对象依赖关系的管理被反转了(获取依赖对象的方式进行了反转),以前是自己主动获取依赖对象,现在是通过框架或者IOC容器将依赖对象注入进来(也可以称之为依赖注入),将依赖对象的管理转到了框架或者IOC容器中,极大了降低了代码之间的耦合性. 1.…
目录 1. 引言 2. 初始化bean的入口 3 尝试从当前容器及其父容器的缓存中获取bean 3.1 获取真正的beanName 3.2 尝试从当前容器的缓存中获取bean 3.3 从父容器中查找bean 3.4 解析bean的依赖 3.5 再一次尝试从缓存中获取 4. 真正创建Bean的方法createBean() 4.1 实例化bean的前置处理 4.2 选择合适的策略创建bean实例 4.3 填充bean的属性,解析依赖,递归创建依赖的bean 4.4 初始化bean 5. 总结 6.…
目录 1. 前言 1.1 IOC容器到底是什么 1.2 BeanFactory和ApplicationContext的联系以及区别 1.3 解读IOC容器启动流程的意义 1.4 如何有效的阅读源码 2. 初探IOC容器启动源码 2.1 启动容器的真正入口refresh() 2.2 容器启动流程的不同阶段 3 容器启动前的准备工作 4. 总结 1. 前言 1.1 IOC容器到底是什么 IOC和AOP是Spring框架的核心功能,而IOC又是AOP实现的基础,因而可以说IOC是整个Spring框架的…
一.Spring IoC容器概述 1.依赖反转(依赖注入):依赖对象的获得被反转了. 如果合作对象的引用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测试性的降低,这对复杂的面向对象系统的设计是非常不利的. 在Spring中,IoC容器是实现依赖控制反转这个模式的载体,它可以在对象生成或者初始化时直接将数据注入到对象中,也可以通过将对象引用注入到对象数据域中的方式来注入对方法调用的依赖.这种依赖是可以递归的,对象被逐层注入. 关于如何反转对依赖的控制,把控制权从具体业务对象中转交到平…
1.1 Spring IoC容器 从昨天的例子当中我们已经知道spring IoC容器的作用,它可以容纳我们所开发的各种Bean.并且我们可以从中获取各种发布在Spring IoC容器里的Bean,并通过描述得到它. 1.2 Spring IoC容器的设计 Spring IoC容器的设计主要是基于BeanFactory和ApplicationContext两个接口,其中ApplicationContext是BeanFactory的子接口之一.换句话说BeanFactory是Spring IoC容…
Spring IoC容器的初始化包括 BeanDefinition的Resource定位.载入和注册 这三个基本的过程.IoC容器的初始化过程不包含Bean依赖注入的实现.Bean依赖的注入一般会发生在第一次通过getBean向容器索取Bean的时候. 先看以下代码: ApplicationContext context = new ClassPathXmlApplicationContext("ioc.xml"); Car car = (Car) context.getBean(&q…