Spring IoC bean 的初始化】的更多相关文章

前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容器中 bean 的初始化阶段. 正文 我们在Spring IoC bean 的创建一文中分析创建 bean 实例的主要流程,此时创建出来的 bean 还是个属性未赋值的实例,在创建完之后会进入 populateBean() 方法,即进入属性赋值阶段.我们简单回顾一下,上次分析过的 doCreateB…
Spring IoC容器的初始化包括 BeanDefinition的Resource定位.载入和注册 这三个基本的过程.IoC容器的初始化过程不包含Bean依赖注入的实现.Bean依赖的注入一般会发生在第一次通过getBean向容器索取Bean的时候. 先看以下代码: ApplicationContext context = new ClassPathXmlApplicationContext("ioc.xml"); Car car = (Car) context.getBean(&q…
前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容器是怎么创建 bean 的实例. 正文 在上一篇Spring IoC bean 的加载中有这么一段代码: if (mbd.isSingleton()) { // 创建和注册单例 bean sharedInstance = getSingleton(beanName, () -> { try { //…
小马哥出手的Spring栈核心编程思想课程,可以说是非常专业和权威的Spring课程.课程主要的方向与核心是Spring Framework总览,带领同学们重新认识重新认识IoC,Spring IoC容器概述课程.Spring Bean基础课程,Spring IoC依赖查找,Spring IoC依赖注入,Spring IoC依赖来源,Spring Bean作用域,Spring Bean生命周期,Spring配置元信息等等.课程内容非常的专业,需要同学们优先进行Spring协议系列的基础学习,再进…
前言 1.在讲BeanDefinition的载入和解析之前,我们先来看看什么是BeanDefinition. Bean对象在Spring中是以BeanDefinition来描述的,也就是说在Spring中,BeanDefinition用来表示bean对象. 2. 对于Spring IOC容器,BeanDefinition的载入过程,相当于把Spring的配置文件转换成Spring的内部数据结构. 在上一篇中容器初始化各个父类方法调用图,如下图所示: 1.BeanDefinition的载入和解析…
前言 上一篇博文“ Spring IOC是怎样启动的 ”中提到了refresh()方法,这个就是容器初始化的入口.容器初始化共有三个阶段: 第一阶段:Resource定位 第二阶段:BeanDefinition解析 第三阶段:BeanDefinition注册 这一篇我们讲第一阶段Resource定位. 阅读目录 1.XmlWebApplicationContext的继承体系图 2.refresh()方法 3.Resource组件 1.  XmlWebApplicationContext的继承体系…
前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 容器是怎么加载 bean 的. 正文 我们先看一下Spring IoC BeanDefinition 的加载和注册一文中获取 bean 的实例代码: public class BeanDefinitionDemo { public static void main(String[] args) { D…
Spring IOC 中涉及的重要接口 BeanDefinition Bean的描述信息,实现类包括 RootBeanDefinition 和 GenericBeanDefinition,Bean的描述信息中定义了一系列Bean的信息,比如:beanClassName.scope.lazyinit.dependsOn.primary.initMethodName.destroyMethodName.isSington.isAbstract等信息. BeanDefinitionReader 用于解…
首先我们不要在学习Spring的开始产生畏难情绪.Spring没有臆想的那么高深,相反,它帮我们再项目开发中制定项目框架,简化项目开发.它的主要功能是将项目开发中繁琐的过程流程化,模式化,使用户仅在固定文件中增加特定标签并实现特定逻辑层的代码就能完成项目开发.下面我们来分析web项目启动时bean的初始化过程. 我们遵循类的依赖,引用关系来理清spring在这一过程中的架构和细节实现.java web项目入口在web.xml,Spring在此配置入口servlet完成bean的加载.Dispat…
---恢复内容开始--- 前言 在上一篇中有一处代码是BeanDefiniton注册的入口,我们回顾一下. 1.BeanDefiniton在IOC容器注册 首先我们回顾两点,1. 发起注册的地方:2. 注册的实现类 1.发起注册的地方 我们先看第一点,在上篇博文中我们讲了Bean的解析,在DefaultBeanDefinitonDocumentReader类的processBeanDefiniton()方法中,其中一个是去完成BeanDefiniton的载入,另一个是完成注册.我们看下代码: D…
生命周期执行的过程如下:1) spring对bean进行实例化,默认bean是单例2) spring对bean进行依赖注入3) 如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法4) 如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来5) 如果bean实现了ApplicationContextAware()接口,spring将调用setAppl…
IOC初始化流程 Resource定位:指对BeanDefinition的资源定位过程.Bean 可能定义在XML中,或者是一个注解,或者是其他形式.这些都被用Resource来定位, 读取Resource获取BeanDefinition 并注册到 Bean定义注册表中. BeanDefinition的载入:把用户定义好的Javabean表示为IoC容器内部的数据结构,这个容器内部的数据结构就是BeanDefinition. 向IoC容器注册这些BeanDefinition. 获取Bean的流程…
import org.springframework.context.annotation.AnnotationConfigApplicationContext; 使用AnnotationConfigApplicationContext可以实现基于Java的配置类加载Spring的应用上下文.避免使用application.xml进行配置.在使用spring框架进行服务端开发时,个人感觉注解配置在便捷性,和操作上都优于是使用XML进行配置; 使用JSR250注解需要在maven的pom.xml里…
Bean的生命周期 : 创建bean对象 – 属性赋值 – 初始化方法调用前的操作 – 初始化方法 – 初始化方法调用后的操作 – --- 销毁前操作 – 销毁方法的调用. [1]init-method和destroy-method 自定义初始化方法和销毁方法两种方式:xml配置和注解. ① xml配置 <bean id="person" class="com.core.Person" scope="singleton" init-meth…
1.0 继承关系 实体 package com.java.test5; import java.util.*; /** * @author nidegui * @create 2019-06-22 14:45 */ public class People { private Integer id; private String name; private String age; private String className; public String getClassName() { re…
建立一个实体 package com.java.test4; import java.util.*; /** * @author nidegui * @create 2019-06-22 14:45 */ public class People { private Integer id; private String name; private String age; private Dog dog; private List<String> a=new ArrayList<>()…
俩个实体 package com.java.test4; /** * @author nidegui * @create 2019-06-22 14:45 */ public class People { private Integer id; private String name; private String age; private Dog dog; public Integer getId() { return id; } public People() { } public Dog…
前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 什么是公共注解?公共注解就是常见的Java注解,特别是JSR-250中的注解.例如:@Resource.@PostConstructor.@PreDestroy 等等,本文也就主要分析这三个注解在 Spring 中是如何处理的. 正文 @Resource 注解的处理 对 @Resource 注解的处理类是 CommonAnnotationB…
上节探讨了Spring IOC容器中getBean方法,下面我们将自行编写测试用例,深入跟踪分析bean对象创建过程. 测试环境创建 测试示例代码如下: package org.springframework.context.mytests; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPa…
一.IOC控制反转概念 控制反转(IOC)是一种通过描述(在Java中可以是XML或者是注解)并通过第三方去生产或获取特定对象的方式. 主动创建模式,责任在于开发者,而在被动模式下,责任归于Ioc容器,基于这种被动形式,我们就是对象被反转了. 二.Spring IoC容器的初始化和依赖注入 Bean的定义何处是花再Spring Ioc容器中是两大步骤,它是先定义,然后初始化和依赖注入. Bean的定义分为3步: (1)Resource定位,这步是Spring IoC容器根据开发者的配置,进行资源…
Spring概述 Spring的设计严格遵从的OCP(开闭原则),保证对修改的关闭,也就是外部无法改变spring内部的运行流程:提供灵活的扩展接口,也就是可以通过extends,implements重写方法从而改变类的加载行为.下图内容为Spring框架里提供的各种功能模块. #1 Spring IoC目的是解决对象之间的耦合依赖关系,使用IOC容器来管理这些依赖关系,并降低框架对业务代码的侵入性(non-invasively):常用容器接口为ApplicationContext,常用容器实现…
Spring 允许 Bean 在初始化完成后以及销毁前执行特定的操作,常用方法有三种: 使用注解,在指定方法上加上@PostConstruct或@PreDestroy注解来制定该方法是在初始化之后还是销毁之前调用: 使用xml配置,通过<bean> 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法: 实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法. 这三种实现方式,在执行顺序上…
Spring bean的几个属性:scope.init-method.destroy-method.depends-on等. Scope 在Spring容器中是指其创建的Bean对象相对于其他Bean对象的请求可见范围. scope分类:singleton, prototype, request, session, global session. 这里的singleton和设计模式里面的单例模式不一样,标记为singleton的bean是由容器来保证这种类型的bean在同一个容器内只存在一个共享…
基本概念 Spring IoC 容器的初始化过程在监听器 ContextLoaderListener 类中定义. 具体由该类的的 configureAndRefreshWebApplicationContext 方法实现,它包含了两个过程: 配置过程 刷新过程 原理分析 下面来看 configureAndRefreshWebApplicationContext 方法的具体实现: // 表示容器的标识 public static final String CONTEXT_ID_PARAM = "c…
Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入…
Spring IoC 概述 IoC:Inverse of Control(控制反转) 读作"反转控制",更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理. 正控:若要使用某个对象,需要自己去负责对象的创建 反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架 好莱坞法则:Don't call me ,I'll call you 一个例子…
Spring源码解析:Bean实例的创建与初始化 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入Bean…
一.什么是Ioc/DI? IoC 容器:最主要是完成了完成对象的创建和依赖的管理注入等等. 先从我们自己设计这样一个视角来考虑: 所谓控制反转,就是把原先我们代码里面需要实现的对象创建.依赖的代码,反转给容器来帮忙实现.那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系.这个描述最具体表现就是我们可配置的文件. 对象和对象关系怎么表示? 可以用 xml , properties 文件等语义化配置文件表示. 描述对象关系的文件存放在哪里? 可能是 classpa…
Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入…
Spring 支持五种作用域,分别是 singleton.prototype.request.session 和 global session. 作用域 说明  singleton (默认作用域)单例模式,每个 Spring IoC 容器只会实例化一个使用 singleton 定义的 Bean.  prototype  原型模式,每次从容器调用 Bean 时,都会返回一个新的实例.  request  对于每次 HTTP 请求,使用 request 定义的 Bean 都产生一个新实例.只有在 W…