`
bolinyang
  • 浏览: 75355 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Bean的生命周期

阅读更多
一.概述
首先,关于生命周期其实就是一个事物从出生到死亡这个阶段,回到我们的程序世界中,对象的生命周期就是对象从创建到销毁这个阶段,在目前的web开发中,Spring这个轻量级的框架被广泛采用,bean是Spring中的一个核心思想,其实bean就是一个对象,但是这个对象的每个成员都有自己的get和set方法,方便获取和设置对象成员变量的值。bean是由spring容器负责管理的,在spring中bean分为单例和多例,单例bean只初始化一次,多例bean每次在调用getBean方的时候都会进行一次初始化,不论是单例bean还是多例bean,他们都有自己的生命周期,只不过单例和多例bean的生命周期阶段可能会有所不一样,就是说在bean的生命周期中,可能有几个阶段单例bean会经历,而多例bean不会经历,或者有几个阶段多例bean会经历,而单例的bean不会经历。下面关于bean的生命周期,就把单例和多例bean整合在一起。在Spring容器中默认所有的bean都是单例的。
二.bean的生命周期示意图


   关于这张生命周期的图,我们做如下的概述:

    [1]getBean方法调用就意味着bean的生命周去即将开始了,我们一般用到的bean工厂有BeanFactory和ApplicationContext两种,ApplicationContext是建立在BeanFactory的基础之上的,如下图所示

    关于这二者之间的区别,首先BeanFactory有的ApplicationContext都有,对于bean的生命周期而言,这里需要说明的是在BeanFactory中的bean在容器创建的时候不会自动初始化,需要在BeanFactory之外调用getBean方法来触发bean的实例化,但是对于ApplicationContext就有所不同了,除非我们自己在XML文件中指定bean是lazy-init的,否则所有的bean在容器创建的时候都会被初始化一次,bean的初始化也是调用getBean方法来实现的,不过这个getBean方法是由容器自己去调用的。


    [2]在实例化bean的时候,bean的缺省构造函数会被调用,这里指注入的方式是setter方法时,bean的缺省构造函数会优先被执行。Spring会优先使用反射来调用这个构造函数来构建一个空壳子。方便Spring容器后续在这个空壳子上调用get和set方法。


    [3]在bean的配置文件中我们会指定bean的一些成员变量,关于bean的配置文件,在使用spring的时候一直感觉自己在搞配置,特别是对于刚开始接触的人而言,发现一大堆的配置,其实这里通过XML文件只是其中一种,我们可以使用其他一些文件来代替XML文件,这个XML文件只是信息的描述,最终是要把这些信息解析出来,当然如果我们提供一种自己的语言来配置,并且有相关的解析程序一样可以的。我们可以大胆想像如何减少配置文件的编写而又保持Spring目前的各种特性。


    [4].Aware接口,实现了相关Aware接口的bean就有了感知的能力,关于Aware这个词在这里用的很形象,翻译过来是感知的意思,就是感觉知道,让bean感觉到某些事情,让bean知道某些事情,如果没有实现相关的感知接口,bean就没有感知到相关事情的能力,这样在Spring容器中就会出现一些有感知能力的bean实例,一些没有任何感知能力的bean实例,有感知能力的bean实例他们的感知能力又有强弱之分,实现的感知接口越多,bean的感知能力就越强。这里经常遇见的两个感知接口BeanNameAware和BeanFactoryAware,关于这两个接口,前者使得bean能感知到自己在Spring容器中的名字,每个bean在Spring容器中都有自己的名字,但是bean要是不实现这个接口,它就无法感知到自己在Spring容器中的名字,后者使得bean能感知到到整个bean工厂的存在,实现了这个接口的bean可以拥有整个bean工厂,这时候这个bean就能感知到bean工厂中其他bean的存在,这个感知接口在解决单例依赖多例的问题时很常见。


    [5]BeanPostProcessor也是一个接口,这个接口中的两个方法可以对bean在不同阶段进行自定义,这可以理解为是spring暴露出来的一个扩展点,方便我们去干涉一些bean工厂的行为。


    [6]InitializingBean是一个接口,需要bean自己去实现,这个接口中的方法在bean的属性设置结束后调用.


    [7]init-method,如果我们在XML配置文件中配置了这个属性,那么这时候相关的方法就会被调用。


    [8]Disposable接口也是需要bean去实现的,然后在bean销毁的时候调用。


    [9]我们同样可以在XML配置文件配置一个destroy-method方法,指定bean销毁时要调用的方法。


三.最后总结

    关于bean的构造虽然Spring容器封装了很多地方,但是依然暴露出一些接口方便程序员自己去定制bean,去干涉一下bean的创建,同时也可以获取bean创建过程中的一些信息,这些信息可以用来解决一些特定场景下的问题。如果我们清楚bean的生命周期以及这些可扩展的点,我们就可以定制自己的bean,当然我们也可以定制自己的bean工厂,前面定制自己bean使用的是BeanPostProcessor接口,定制自己的bean工厂使用的就是BeanFactoryPostProcessor,这都是Spring暴露出来的一些扩展点。Spring的扩展机制传达的就是这样一种理念:你如果觉得我定制的东西不是你想要的话,我允许你在我的基础上定制你想要的东西。
  • 大小: 73.4 KB
  • 大小: 25.8 KB
分享到:
评论

相关推荐

    Spring的bean生命周期

    Bean生命周期的理解对于优化应用性能和理解Spring内部工作原理至关重要。这里我们将深入探讨Spring的Bean生命周期、容器周期以及工厂周期。 首先,让我们从Bean生命周期开始。在Spring中,Bean的生命周期包括以下几...

    Spring bean生命周期demo

    接下来,我们将深入探讨Spring Bean生命周期的各个阶段,并通过具体的示例来演示。 1. **配置阶段** 在Spring容器初始化时,它会读取配置文件(如XML或Java配置),解析Bean定义,包括其依赖关系、初始化方法、...

    Spring Bean生命周期.pdf

    其中,Spring Bean生命周期的管理是Spring框架的核心功能之一,它涉及Spring容器如何创建、配置以及销毁Bean的整个过程。理解Spring Bean的生命周期对于开发高效和可维护的Java应用至关重要。 Spring Bean生命周期...

    spring bean的生命周期

    Spring Bean的生命周期是Spring框架中的核心概念,它涵盖了Bean从创建到销毁的全过程。了解这一过程对于优化应用程序的性能和管理资源至关重要。在Spring中,Bean的生命周期主要分为以下几个阶段: 1. **初始化阶段...

    Spring Bean生命周期&BeanDefinitions1

    Spring框架是Java应用开发中的一个核心组件,尤其在企业级应用中广泛使用。Spring通过其IoC(Inversion of Control,控制反转)容器管理Bean的生命周期,...理解Bean生命周期对于有效管理和优化Spring应用至关重要。

    基于java的企业级应用开发:Bean的生命周期.ppt

    实例化过程是Bean生命周期的起点。 2. **依赖注入**: - 在Bean实例化后,Spring会执行依赖注入(Dependency Injection,DI),将所需的属性值注入到Bean中。这可以通过setter方法、构造函数或者字段注入实现。 3...

    Spring框架中Bean的生命周期 Spring中Bean有几种作用域

    Spring中的Bean生命周期主要分为两个阶段:容器管理阶段和用户自定义阶段。在容器管理阶段,Spring容器负责Bean的实例化、属性注入、初始化、使用和销毁。而在用户自定义阶段,开发者可以通过定义回调方法或使用特定...

    Bean生命周期.jpg

    java Bean生命周期.jpg

    浅尝Spring注解开发_Bean生命周期及执行过程.doc

    ingBean 和 DisposableBean 接口 当不使用注解而是通过实现接口的方式来控制 Bean 的生命周期时,可以实现 InitializingBean 和 DisposableBean 接口。这两个接口由 Spring 提供,它们包含两个方法: - ...

    谈谈我对Spring Bean 生命周期的理解

    本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期管理方式等相关知识点。 一、 Spring Bean 生命周期概述 Spring Bean 生命周期是指 Spring 容器中 Bean 的创建、初始化、销毁等...

    Spring 的 Bean 生命周期,11 张高清流程图及代码,深度解析.docx

    Spring 的 Bean 生命周期,11 张高清流程图及代码,深度解析

    Bean的生命周期介绍

    初始化是Bean生命周期中的一个重要环节,通常包括以下几个步骤: 1. **构造函数创建**:当Bean需要被创建时,Spring会调用其无参构造函数(或通过`@Autowired`注解依赖注入的构造函数)来实例化Bean。 - 如上文...

    spring bean的生命周期测试代码

    本资源提供了在Spring 4.2环境下关于Bean生命周期的测试代码,帮助我们深入理解这一关键概念。 首先,让我们了解Spring Bean的生命周期主要包含以下几个阶段: 1. **实例化**:Spring容器通过`Class`对象或`...

    详解Spring中Bean的生命周期和作用域及实现方式

    Spring中Bean的生命周期和作用域及实现方式 Spring是一个非常流行的Java应用程序框架,它提供了一个灵活的机制来管理Bean的生命周期和作用域。Bean的生命周期和作用域是Spring框架中两个非常重要的概念,它们决定了...

    SSH笔记-IOC容器中 Bean 的生命周期

    实现`BeanPostProcessor`接口可以让开发者在Bean生命周期的关键时刻插入自定义逻辑,比如验证、缓存管理、AOP代理等。这提供了高度的灵活性,但同时也需要谨慎处理,因为不恰当的处理可能会影响到整个应用的性能和...

    SpringBoot Bean的生命周期demo.zip

    一般情况下,我们只是关心如何正确地将Bean装配到容器中,并不关心Ioc容器是如何装配和销毁Bean的过程。但是恰恰有时候,我们需要自定义初始化或销毁Bean的过程,以满足一些“特殊的”需求。比如,数据源在关闭的...

    08-IoC配置-bean的生命周期控制

    Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务。 Spring IOC容器对Bean的生命周期进行管理的过程如下: 通过构造器或工厂方法创建Bean实例 为Bean的属性设置值和对其它Bean的...

    Spring管理的Bean的生命周期

    总之,Spring管理的Bean生命周期包括创建、初始化、活跃使用和销毁四个主要阶段,通过各种回调方法、接口和注解,我们可以对Bean的行为进行自定义,以满足不同应用场景的需求。深入理解这些机制,有助于我们更好地...

    Spring Bean 的生命周期

    本篇将详细阐述Spring Bean生命周期的各个阶段,以及如何记忆和深入理解这一过程。 首先,Spring Bean的生命周期可以分为两个主要阶段:容器初始化阶段和容器销毁阶段。 在容器初始化阶段,Spring Bean会经历以下...

Global site tag (gtag.js) - Google Analytics