五 Bean的生命周期
在Spring中,有两个层面的Bean生命周期:1)Bean的作用范围
2)实例化Bean时所经历的一系列阶段
1.BeanFactory中Bean的生命周期
- 1.当调用者通过getBean(beanName)向容器请求某一个Bean时,如果容器注册了org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在实例化Bean之前,将调用接口的postProcessBeforeInstantiation()方法;
- 2.根据配置情况调用Bean构造函数或工厂方法实例化Bean;
- 3.如果容器注册了InstantitationAwareBeanPostProcessor()接口,在实例化Bean之后,调用该接口的postProcessAfterInstantiation()方法,可在这里对已经实例化的对象进行一些“梳妆打扮”;
- 4.如果Bean配置了属性信息,容器在这一步招收将配置值设置到Bean对应的属性中,不过在设置每个属性之前将先调用InstantiationAwareBeanPostProcessor接口的postProcessProperyValues()方法;
- 5.调用Bean的属性这只方法设置属性值;
- 6.如果Bean实现了org.springframework.beans.factory.BeanNameAware接口,将调用setBeanName()接口方法,将配置文件中该Bean对应的名称设置到Bean中;
- 7.如果Bean实现了org.springframework.bean.factory.BeanFactoryAware接口,将调用setBeanFactory()接口方法,将BeanFactory容器实例设置到Bean中;
- 8.如果Bean实现了org.springframework.beans.factory.config.BeanPostProcessor后处理器,将调用BeanPostProcessor的Object postProcessBeforeInitialization(Object bean,String beanName)接口方法对Bean进行加工操作。其中入参bean是当前正在处理的Bean,而beanName是当前Bean的配置名,返回的对象为加工处理后的Bean。用户可以使用该方法对某些Bean进行特殊处理,是指改变Bean的行为。
- 9.如果在Bean实现InitializingBean的接口,将调用接口的afterPropertiesSet()方法;
- 10.如果在<bean>通过init-method属性定义初始化方法,将执行这个方法;
- 11.BeanPostProcessor后处理器定义了两个方法:其一是postProcessBeforeInitialization()在第8步调用;其二是Object postProcessAfterInitialization(Object bean ,String beanName)方法,这个方法在此时调用,容器在此获得对Bean进行加工处理的机会;
- 12.如果在<bean>中指定Bean的作用范围为scope=“prototype”,将Bean返回给调用者,调用者负责Bean后续生命的管理,SPring不在管理这个Bean的生命周期。如果作用范围设置为scope="singleton",则将Bean放入到Spring IoC容器的缓存池中,并将Bean引用返回给调用者,Spring继续对这些Bean进行后续的生命管理;
- 13.对于scope="singleton"的Bean,当容器关闭时,将触发Spring对Bean的后续生命周期的管理工作,首先如果Bean实现DisposableBean接口,则将调用接口的afterPropertiesSet()方法,可以再次编写释放资源,记录日志等操作;
- 14.对于scope=“singleton”的Bean,如果通过<bean>的destroy-method属性指定了Bean的销毁方法,Spring将执行Bean的这个方法,完成Bean资源的释放等操作。
简单讲就是
Spring提倡“不对应用程序类做任何限制”,所以推荐使用<bean>的init-method和destroy-mehtod属性配置方式为Bean指定初始化和销毁的方法。
2.ApplicationContext中Bean的生命周期
ApplicationContext中Bean的生命周期与BeanFactory的基本相同,其中最大的不同点是:前者会利用java反射机制自动识别出配置文件中定义的BeanPostProcessor,InstantiationAwareBeanPostProcessor和BeanFactoryPostProcessor,并自动将他们注册到应用上下文;而后者需要在代码中通过手工调用addBeanPostProcessor()方法进行注册。所以,在应用开发中普遍使用ApplicationContext。

- 大小: 306.2 KB

- 大小: 9.6 KB
分享到:
相关推荐
在Java Spring框架中,Spring IoC(Inversion of Control,控制反转)是核心特性之一,它使得应用程序的组件之间的依赖关系不再由代码直接管理,而是交由Spring IoC容器负责。这种设计模式降低了代码间的耦合,提高...
Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)能力而著名。在本教程"spring4--1.入门及ioc"中,我们将...
这个jar文件"Spring-ioc-jar"包含了实现Spring IOC功能所需的关键类和接口,是学习和使用Spring IOC技术的基础。 Spring框架的IOC容器是其核心组件,主要由`ApplicationContext`和`BeanFactory`两个接口代表。`...
《Spring框架深度解析》 Spring Framework,作为Java开发领域中的基石,是企业级应用开发的首选框架。...这不仅对于Java开发者,对于所有希望深入学习软件设计和架构的人来说,都是一份宝贵的资料。
标题“Spring-MVC+Spring-IOC+Spring-JdbcTemple”揭示了这个项目或教程是关于如何集成并使用Spring框架的三个核心模块:Spring MVC、Spring IOC(Inversion of Control,控制反转)以及Spring JDBC Template。...
Spring框架是Java开发中的一个核心组件,它提供了许多功能,其中最重要的一项就是Inversion of Control(IoC),也称为Dependency Injection(DI)。IoC容器是Spring的核心,它负责管理对象的生命周期和对象间的依赖...
2. **spring-beans**: 支持Bean工厂和XML配置,是IoC容器实现的基础。 3. **spring-context**: 扩展了IoC容器,引入了上下文概念,提供了对国际化、事件、资源、缓存等支持。 4. **spring-aop**: 实现了面向切面...
开发者可以通过阅读这些文档快速上手,并深入学习Spring的高级特性,如依赖注入、AOP(面向切面编程)、数据访问、Web应用、测试等。 2. **libs文件夹**: 这个文件夹包含了Spring框架所需的jar包,这些jar包涵盖...
2. **spring-context**:扩展了spring-beans,引入了ApplicationContext接口,提供了一种更高级的容器,可以处理国际化、事件传播、资源加载等功能。 3. **spring-aop**:提供了AOP功能,包括定义切入点、通知、...
Spring.Demo项目很可能是包含一个简单的Spring.NET应用示例,可能包括了XML配置文件、服务接口和实现类、以及如何使用IoC容器来获取和使用这些对象的代码。通过这个示例,你可以更直观地了解如何在实际项目中运用...
Spring Framework 是一个开源的应用程序框架,它主要针对Java平台,为构建企业级应用提供了全面的解决方案。5.3.7.RELEASE是Spring Framework的一个稳定版本,包含了一系列的增强功能和性能优化。本压缩包“spring-...
Spring2.5和Hibernate3集成 采用声明式事务 1.声明式事务的配置 * 配置sessionFactory * 配置事务管理器 * 配置事务的传播特性 * 配置哪些类哪些方法使用事务 2.编写业务逻辑方法 * 继承...
这些文档涵盖了从基本概念到高级特性的所有内容,是学习和使用Spring不可或缺的资源。 “spring-5.3.2-schema.zip”文件则包含了Spring配置文件的XML Schema定义,这些定义帮助开发者更好地理解和编写符合规范的...
Spring Framework 是一个开源的Java平台,它为构建企业级应用提供了全面的编程和配置模型。这个框架的核心特性是依赖注入(Dependency Injection,DI),用于管理对象的生命周期和配置。Spring 框架的设计目的是使...
Spring Tool Suite(STS)将Eclipse的强大学习曲线和强大的开发工具与Spring的开发工具集结合在一起,提供了一流的Spring支持,包括智能代码补全、配置向导、项目模板、Spring Boot启动器、Spring Roo支持等。...
例如,关于IoC(Inversion of Control,控制反转)的实现,Spring使用了XML配置或注解来定义bean的依赖关系,通过反射机制动态加载和管理bean。另外,AOP模块实现了切面编程,允许我们定义横切关注点,如日志、事务...
其中,用户指南介绍了如何开始使用Spring,包括安装、配置和基本用法;参考手册则深入到各个模块的细节,提供了详细的API解释和示例代码;API文档则是开发者查阅具体类和接口的工具。 四、应用实践 在实际项目中,...
它提供了一种将Spring容器与OSGi服务层集成的方法,使得开发者可以使用Spring的IoC(控制反转)和AOP(面向切面编程)特性来管理OSGi服务。 3. **1.2.0-rc1版本** "spring-osgi-1.2.0-rc1"是Spring OSGi的一个早期...
2. **Spring-5.2.15.RELEASE-dist.zip**:这个文件很可能是Spring框架的核心库,包括了Spring的核心模块,如IoC(Inversion of Control)容器、AOP(Aspect-Oriented Programming)支持、数据访问/集成层、Web层等。...
本章主要介绍Spring框架中的控制反转(Inversion of Control,IoC)思想,以及依赖注入(Dependency Injection,DI)与依赖查找(Dependency Lookup,DL)两种实现IoC的方式。此外,还涉及了Spring程序开发的基本...