Spring源码--Bean的管理总结(一)】的更多相关文章

前奏 最近看了一系列解析spring管理Bean的源码的文章,在这里总结下,方便日后复盘.文章地址https://www.cnblogs.com/CodeBear/p/10336704.html spring的一大核心就是Ioc,即把Bean放到一个公共的容器中,既替开发者管理了Bean的生命周期,又解耦了类之间的持有关系. spring中,管理Bean的容器都叫xxxContext,这里的继承关系有点复杂,但是功能是相同的--存放并管理各种Bean.我们常用的用注解生成的Bean,都放在Ann…
一.ApplicationContext的中文意思是“应用上下文”,它继承自BeanFactory接口,除了包含BeanFactory的所有功能之外,在国际化支持.资源访问(如URL和文件).事件传播等方面进行了良好的支持,被推荐为Java EE应用之首选,可应用在Java APP与Java Web中. 二.ApplicationContext相对于XmlBeanFactory做了很多是拓展的功能,而这些拓展的功能,不管是在容器初始化,还是中间需要处理的过程,都做了很大的改善以及深入. 三.先看…
一.spring的IOC控制反转:控制反转——Spring通过一种称作控制反转(IOC)的技术促进了松耦合.当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.说白了就是原本需要手动去创建和管理的对象,现在交给容器了.在容器的基础上,实现对象的控制.这个方式也很好的减少了开发者在框架上面的时间,更多关注点在业务逻辑上面. 二.这表博客的主要目的是研究,bean容器的初始化,会在最基本的bean初始化作源码的解析和分析.如何存在不妥当的地方,还请…
一.前面说了bean的容器初始化,后面当然是说bean的加载.这里还是不讲解ApplicationContext的bean的加载过程,还是通过最基础的XmlBeanFactory来进行讲解,主要是熟悉通过BeanFactory是怎么实现class的实例化的. 二.声明一下:XmlBeanFactory和ApplicationContext的不同在与,ApplicationContext在容器初始化的时候,就做了很多准备操作.而XmlBeanFactory是在获取bean的时候才会调用初始化的东西…
一.自定义标签,自定义标签在使用上面相对来说非常常见了,这个也算是spring对于容器的拓展.通过自定义标签的方式可以创造出很多新的配置方式,并且交给容器直接管理,不需要人工太多的关注.这也是spring对于配置拓展的一个很重要的方式. 二.自定义标签的几个步骤:1.创建可扫描的标签和对应的解析类  2.读取页面元素解析 3.加入容器管理 三.涉及到的常用类:BeanDefinitionParser.NamespaceHandlerSupport:文件:spring.handlers.sprin…
一.写博客也有一段时间了,感觉东西越来越多了,但是自己掌握的东西越来越少了,很多时候自己也在想.学那么多东西,到头来知道的东西越来越少了.是不是很奇怪,其实一点都不奇怪. 我最近发现了一个很大的问题,就是自己做开发这么久了.很多原理以及实现都不是很了解,包括自己在假装面试了解自己不足的时候,也突显除了自己的问题所在.面试官会问你,你真的懂这个技术吗.那么它的实现原理是怎么样的,简单的描述一下.当时我就懵逼了,这个问题说严重也严重,说不严重也不严重. 因为,作为2年开发的我.开发和自己积累下来的应…
Spring源码剖析——依赖注入实现原理 2016年08月06日 09:35:00 阅读数:31760 标签: spring源码bean依赖注入 更多 个人分类: Java   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lisongjia123/article/details/52134396 引言   在之前的Spring源码剖析——核心IOC容器原理这篇文章中,已经详细介绍了在Spring当中我们配置的Bean是怎样被Spring解析和…
一.Aware接口,这个也是spring的拓展之一,为啥要单独拿出来讲呢,因为他相比于BeanFactoryPostProcessor,BeanPostProcessor的实用性更加高,并且在具体的业务中也可以灵活使用,主要是能够达到解耦的目的. 二.常用的Aware接口有:第一类:BeanNameAware/BeanClassLoaderAware/BeanFactoryAware. 第二类:EmbeddedValueResolverAware/ResourceLoaderAware/Appl…
一.BeanPostProcessor这个是spring容器的拓展之一,是用于获取bean的时候处理对应的对象: 二.常用场景,在获取bean的时候,重新初始化bean的属性等. 三.实现方式(加入容器后,调用其他bean的时候,通过BeanPostProcessor来进行处理) import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProc…
代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已,Spring的加载过程相对是不太透明的,不太好去找加载的代码入口. 下面有很简单的一段代码可以作为Spring代码加载的入口: ApplicationContext ac = new ClassP…
     最近在研究Spring bean 生命周期相关知识点以及源码,所以打算写一篇 Spring bean生命周期相关的文章,但是整理过程中发现涉及的点太多而且又很复杂,很难在一篇文章中把Spring bean 的生命周期讲清楚,所以最后决定分解成几个模块来写,最后在写一篇文章把各个内容串联起来,这样可以讲的更细更深入不会犹豫篇幅而讲的太笼统.bean 生命周期所涉及的主要流程如下图所示.      在上篇文章写了有bean实例创建相关的内容,感兴趣的朋友可以去看看Spring 源码分析之…
转载自:https://www.cnblogs.com/xrq730/p/6285358.html 代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事的都是Java Web的工作,对于程序员来说,一个Web项目用到Spring,只是配置一下配置文件而已,Spring的加载过程相对是不太透明的,不太好去找加载的代码入口. 下面有很简单的一段代码可以作…
概述 前面我们已经分析了spring对于xml配置文件的解析,将分析的信息组装成 BeanDefinition,并将其保存注册到相应的 BeanDefinitionRegistry 中.至此,Spring IOC 的初始化工作完成.接下来我们将对bean的加载进行探索. 之前系列文章: spring源码深度解析— IOC 之 容器的基本实现 spring源码深度解析— IOC 之 默认标签解析(上) spring源码深度解析— IOC 之 默认标签解析(下) spring源码深度解析— IOC…
前言 上篇文章中介绍了Spring容器的扩展点,这个是在Bean的创建过程之前执行的逻辑.承接扩展点之后,就是Spring容器的另一个核心:Bean的生命周期过程.这个生命周期过程大致经历了一下的几个阶段 在本节中重点介绍实例化.填充装配.唤醒Aware方法.BeanPostProcessor后置处理.初始化等过程.关于Bean的销毁过程这里不再介绍.由于Bean的生命周期的维护过程实际上都是由BeanFactory负责,所以在开始Bean的生命周期过程详解之前,先概览性了解BeanFactor…
简介 spring-bean 组件是 Spring IoC 的核心,我们可以使用它的 beanFactory 来获取所需的对象,对象的实例化.属性装配和初始化等都可以交给 spring 来管理. 本文将从DefaultListableBeanFactory.getBean(Class)方法开始分析获取 bean 的过程,主要内容如下,由于篇幅较长,可以根据需要选择阅读: beanFactory 的设计 多个 beanName 的处理 获取单例 bean 创建单例 bean bean 的实例化 b…
前文传送门: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 Spring源码分析之BeanFactoryPostProcessor调用过程详解 本文内容: 在IOC中,是如何通过beanDefition创建出一个bean的? 各BeanPostProcessor在这过程中扮演的角色,调用时机? 话不多说,直接正题走起,上图! 下面是bean创建过程的大致流程图,本文将以图中顺序进行逐步源码分析,小伙伴亦可与图中流程边对照边品食 原矢量图地址:https:…
最近赶项目,天天加班到十一二点,终于把文档和代码都整完了,接上继续整. 上一篇聊了beanProcess的注册以及对bean的自定义修改和添加,也标志着创建bean的准备工作都做好了,接下来就是开大招的时候了: 首先看org.springframework.context.support.AbstractApplicationContext#finishBeanFactoryInitialization,refresh()方法的倒数第二个方法: protected void finishBean…
实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring源码-IOC部分-Xml Bean解析注册过程[3] Spring源码-IOC部分-自定义IOC容器及Bean解析注册[4] Spring源码-IOC部分-Bean实例化过程[5] Spring源码-IOC部分-Spring是如何解决Bean循环依赖的[6] 有两种情况会触发bean的实例化:一种是…
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/current/reference/html/core.html 一个IOC讲得很好的博客 https://blog.csdn.net/ivan820819/article/details/79744797 之前总结的Spring文章比较水,这次好好来 文章需要有些Spring源码基础(可以看我的水…
我们到底能走多远系列(33) 扯淡: 各位:    命运就算颠沛流离   命运就算曲折离奇   命运就算恐吓着你做人没趣味   别流泪 心酸 更不应舍弃   ... 主题: Spring源码阅读还在继续,上篇文章初始化IoC容器:摸我 事实上前面的IOC容器初始化只是建立了BeanDefinition数据映射,而依赖注入的过程是在向Ioc容器索要bean的时候发生的. getBean就是触发依赖注入的地方. 1,下面是AbstractBeanFactory的getBean实现.根据scop进行分…
代码入口 上文[Spring源码分析]Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了finishBeanFactoryInitialization方法完成了对于所有非懒加载的Bean的初始化. finishBeanFactoryInitialization方法中调用了DefaultListableBeanFactory的preInstantiateSingletons方法,本文针对p…
doCreateBean方法 上文[Spring源码分析]非懒加载的单例Bean初始化过程(上篇),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码: protected Object doCreateBean(final String beanName, final RootBeanDefinition mbd, final Object[]…
前言 之前两篇文章[Spring源码分析]非懒加载的单例Bean初始化过程(上篇)和[Spring源码分析]非懒加载的单例Bean初始化过程(下篇)比较详细地分析了非懒加载的单例Bean的初始化过程,整个流程始于AbstractApplicationContext的refresh()方法: public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownM…
原型Bean加载过程 之前的文章,分析了非懒加载的单例Bean整个加载过程,除了非懒加载的单例Bean之外,Spring中还有一种Bean就是原型(Prototype)的Bean,看一下定义方式: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="htt…
说明 今天在阅读Spring源码的时候,发现在加载xml中的bean时,解析了很多标签,其中有常用的如:scope.autowire.lazy-init.init-method.destroy-method等等.但还有很多很少用甚至没用过的标签,看来对这个经常使用的框架,还是知之甚少,本着探索的精神,决定将bean中所有相关标签的作用做一次整理,以便完善自己的知识体系. 另外,说明一下,使用的Spring源码版本为当前最新版本5.2.0.BUILD-SNAPSHOT,跟老版本中的相关代码可能会有…
本次主要想写spring bean的实例化相关的内容.创建spring bean 实例是spring bean 生命周期的第一阶段.bean 的生命周期主要有如下几个步骤: 创建bean的实例 给实例化出来的bean填充属性 初始化bea 通过IOC容器使用bean 容器关闭时销毁bean 在实例化bean之前在BeanDefinition里头已经有了所有需要实例化时用到的元数据,接下来spring 只需要选择合适的实例化方法以及策略即可.实例化方法有两大类分别是工厂方法和构造方法实例化,后者是…
之前两篇文章Spring源码分析:非懒加载的单例Bean初始化过程(上)和Spring源码分析:非懒加载的单例Bean初始化过程(下)比较详细地分析了非懒加载的单例Bean的初始化过程,整个流程始于AbstractApplicationContext的refresh()方法: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40…
上文Spring源码分析:非懒加载的单例Bean初始化过程(上),分析了单例的Bean初始化流程,并跟踪代码进入了主流程,看到了Bean是如何被实例化出来的.先贴一下AbstractAutowireCapableBeanFactory的doCreateBean方法代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41…
上文[Spring源码分析]Bean加载流程概览,比较详细地分析了Spring上下文加载的代码入口,并且在AbstractApplicationContext的refresh方法中,点出了finishBeanFactoryInitialization方法完成了对于所有非懒加载的Bean的初始化. finishBeanFactoryInitialization方法中调用了DefaultListableBeanFactory的preInstantiateSingletons方法,本文针对preIns…