首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring源码初探-IOC(1)-Bean的初始化

spring 体系结构图 Bean初始化 个人认为,Spring最原始或者最基础的功能是“容器”,帮你管理着一堆bean的生命周期,任你取用,要想更好的使用Spring,还是得了解Bean的整个生命周期...,首先了解Bean的初始化过程。...本文采用XML配置文件的方式管理bean,分析XmlBeanFactory对于XML文件的解析过程。废话不多说,先上图: ?...BeanDefinition:这个接口及其实现类非常重要,他描述了XML中一个bean节点及其子节点的所有属性,将xml中的描述转变成内部的field信息,举例:scope,lazyinit,ConstructorArgumentValues...定义的人,它做的可都是脏活累活,import/alias/bean等element以及element的子节点以及属性都是它解析并且填充到BeanDefinition中然后使用ReaderContext中的

43410
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spring源码初探-IOC(3)-Bean的初始化-bean的加载

    前言 前面两篇文章主要介绍的是xml到BeanDefinition的过程,我们知道在使用Spring的过程中通常直接使用getBean(beanName)的方式,getBean返回的是实例化并且已经完成初始化后的对象...抽丝剥茧出主干也就是: 根据BeanDefinition的信息找到对象构造器,实例化对象 根据BeanDefinition的信息找到属性值,填充之 如果有初始化方法,调用初始化方法 当然上述主干主要讲的是非单例对象...Spring属性填充过程 Spring在Bean创建过程中提供的扩展点及事件监听 Spring的initiation过程及一种并行初始化的实现。...在getSingleton(beanName, singletonFactory)方法中会调用getObject(),实际上也就是调用了createBean,bean的创建实际上是从这个地方开始的。..., mbd); } 抽去一些不太重要的代码只有,整个逻辑非常清楚,首先createBeanInstance创建对象,然后填充对象populateBean,最后调用初始化方法initializeBean,

    65820

    【死磕 Spring】—– IOC 之 bean 的初始化

    bean 实例的样子,能堪大任了,只需要经历最后一步就破茧成蝶了。...这最后一步就是初始化,也就是 initializeBean(),所以这篇文章我们分析 doCreateBean() 中最后一步:初始化 bean。...bean 的方法其实就是三个步骤的处理,而这三个步骤主要还是根据用户设定的来进行初始化,这三个过程为: 激活 Aware 方法 后置处理器的应用 激活自定义的 init 方法 激活 Aware 方法...Bean 的功能。...BeanPostProcessor 的作用是:如果我们想要在 Spring 容器完成 Bean 的实例化,配置和其他的初始化后添加一些自己的逻辑处理,那么请使用该接口,这个接口给与了用户充足的权限去更改或者扩展

    63220

    初始化Spring Bean:Bean初始化有哪些方式?

    对于Spring Bean 的初始化归纳了下,主要可以归纳一下三种方式 @PostConstruct 标注方法 自定义初始化方法 实现 initializingBean 接口的afterPropertiesSet...()方法 对JDK比较敏感的朋友应该知道@PostConstruct这种标注方法。......"); } } 简单进行容器创建->装置配置->启动应用上下文..依赖查找Bean @Configurable public class BeanInitializationDemo {...二、自定义初始化方法 自定义初始化方法大致可分为三种实现 XML 配置:bean init-method=”init” ... /> Java 注解:@Bean(initMethod=”init”)...归纳 上面三种方式案例分别介绍了PostConstruct、initializingBean以及自定义Bean初始化的方法;从执行结果可以看出,他们的执行顺序是有一定的要求的。

    5.9K21

    spring源码分析:bean的初始化

    我们通过spring容器帮我们实例化并且维护bean的时候,有时候我们需要在bean在实例化完成的时候,帮我们做一些事情,这个时候我们就会使用到bean的初始化方法。...(beanName, bean, mbd); } } } 注释1通过实现InitializingBean方式来实现初始化的非常的简单,不做过多的介绍,注释2通过@Bean的方式稍微介绍一下...当我们通过@Bean方式还是之前通过xml配置bean时都能够指定initMethod属性,此时就会将这个bean先封装成BeanDefinition,同时配置的属性也会设置到BeanDefinition...bean创建的过程都是先封装成beanDefinition,如果这一块不了解的可以先阅读相关文章 上面我们已经知道InitializingBean和@Bean(initMethod=“xx”)来实现初始化方法的原理...(我们自己也可以实现),通过它达到在spring创建过程中拦截的作用,在某个动作之前/之后做一些感兴趣的事情,达到“增强”的目的 这里其实就是用到了一个InitDestroyAnnotationBeanPostProcessor

    67020

    Spring Ioc源码分析 之 Bean的加载(八):初始化

    在上篇文章中,我们详细分析了doCreateBean()中的第5步:属性填充,本文接着分析doCreateBean()的第6步——初始化 bean 实例对象 首先回顾下CreateBean的主流程...单例模式的循环依赖处理 属性填充 初始化 bean 实例对象 依赖检查 注册bean的销毁方法 一、初始化 Spring在对Bean进行属性填充之后,会对Bean进行初始化,代码如下: //AbstractAutowireCapableBeanFactory.java...bean 的方法其实就是三个步骤的处理,而这三个步骤主要还是根据用户设定的来进行初始化,这三个过程为: 激活 Aware 方法。...1.2、后置处理器 BeanPostProcessor 在前面介绍 bean 加载的过程曾多次遇到, 它的作用是: 如果我们想要在 Spring 容器完成 Bean 的实例化,配置和其他的初始化后添加一些自己的逻辑处理...1.3、自定义init方法 在xml中有一个bean >标签的配置, init-method 方法,是可以让我们在Bean初始化的时候,先执行我们自定义的一些逻辑。

    62030

    事件总线怎么初始化的?之前的数据应该如何保存?

    事件总线在进行处理的时候是需要用到初始化以及最终的保存的,因为事件总线在传输的过程当中,经过编纂以及改变,都已经达到了使用者所想要的一个方式,在这个时候是可以了解事件总线怎么初始化的。...之前的数据应该如何保存? 事件总线在进行发布以及组件之间的通讯时,是需要通过设计反射多线程组件等方式进行循环运转。这样的单例模式以及双重校验的事件总线可以确保它在不同的线程当中可以有效的传输。...了解了事件总线怎么初始化之后,之前的数据如果想要保存的话,就可以通过android事件发布,将提前预留好的数据发布到云端。...这样,接收者可以在初始化之后,也将之前发布过的数据全部保存下来,下载到另外一个硬盘驱动上,就不会造成数据的丢失以及浪费。这也是软件发送者以及事件总线接收者在进行处理数据时,应当注意到的一点。...以上就是事件总线怎么初始化?之前的数据应该如何保存?的相关内容,通过这样的了解事件总线组织贡献,可以通过接口的函数,通过计算将数据终端处理进行初始化。

    50530

    延迟初始化Spring Bean:延迟初始化的Bean会影响依赖注入吗?

    前面提到过Bean的初始化方式,在Bean 的配置元信息时候我们知道Bean的元信息配置中有lazy-init 延迟初始化属性配置,延迟初始化Spring Bean 还有Java 注解API的方式实现...); 这个方法的作用是完成Bean的初始化动作,看注释 Instantiate all remaining (non-lazy-init) singletons....它的意思就是:它会去初始化或者是实例化我们所有的非延迟初始化的一个单体类或者单体Bean 进入方法里面又可以发现 // Instantiate all remaining (non-lazy-init...,普通的Bean在这里初始化 ,部分Bean是需要我们内部容器自己做初始化 。...另一个动作就是延迟加载按需加载Bean 总结 其实延迟加载和非延迟加载在定义的时候,就是Bean注册的时候是没有区别按照你需要的时候进行注册;但是在依赖查找和依赖注入的时候它的区别就体现出来了,一个是在应用上下文启动之前

    1.7K30

    【小家Spring】AbstractAutowireCapableBeanFactory#populateBean实现Bean的属性赋值和initializeBean对Bean的初始化

    源码分析的时候,留下两个重要的步骤还没有说,一个是属性赋值的populateBean()(依赖注入),还有一个就是赋值后对Bean的一些初始化操作:initializeBean() Spring源码基于的...进行Bean的初始化工作 上面步骤已经完成了Bean的属性的赋值工作,接下里就进行Bean的一些初始化工作,其中包括: 1:Bean后置处理器初始化 2:Bean的一些初始化方法的执行init-method...mbd.isSynthetic()) { // 执行所有的BeanPostProcessor#postProcessBeforeInitialization 初始化之前的处理器方法 //...相当于当Servlet是以Bean的形式注入容器的时候,Bean初始化完成后,会自动调用它的init方法~~~~~~~~ //如果config为null,那么它传入可能为代理的DelegatingServletConfig...接口初始化 (如果配置了method-init,则调用其方法初始化 ) 调用applyBeanPostProcessorsAfterInitialization 初始化之后的处置操作 总结 populateBean

    1.2K10
    领券