Bean的BeanLifeCycle
在Java中Bean 的生命周期一般是:1.定义;2.初始化;3.使用;4.销毁
在Spring中Bean的生命周期:
从图中,我们可以看到实例化Bean的过程中有以下几个节点:
1)设置属性值;
2)调用Bean中的BeanNameAware.setBeanName()方法,如果该Bean实现了BeanNameAware接口;
3)调用Bean中的BeanFactoryAware.setBeanFactory()方法,如果该Bean实现了BeanFactoryAware接口;
4)调用BeanPostProcessors.postProcessBeforeInitialization()方法;
5)调用Bean中的afterPropertiesSet方法,如果该Bean实现了InitializingBean接口;
6)调用Bean中的init-method,通常是在配置bean的时候指定了init-method,例如:<bean class="beanClass" init-method="init"></bean>
7)调用BeanPostProcessors.postProcessAfterInitialization()方法;
8)如果该Bean是单例的,则当容器销毁并且该Bean实现了DisposableBean接口的时候,调用destory方法;如果该Bean是prototype,则将准备好的Bean提交给调用者,后续不再管理该Bean的生命周期。
Bean的初始化与销毁:
在Java当中,累的初始化是在构造函数当中,那么在Spring中,类怎么进行初始化呢?
1.构造函数:
2.自定义的初始化的方法:
自定义中有三种方法指定我们自定义的初始化、销毁的方法。
1.在<bean></bean>中指明属性:init-method、destroy-method的值并在相对应的bean中实现相对应的方法;
2.在<beans></beans>中指明属性:default-init-method、default-destroy-method的值并在相对应的bean中实现相对应的方法;
3.在bean中实现相对应的接口:org.springframework.beans.factory.InitializingBean,org.springframework.beans.factory.DisposableBean并实现相对应的方法。
几种方法的比较:
在相对应的bean中实现接口InitializingBean,DisposableBean并实现相对应afterPropertiesSet(),destroy()方法。在bean被初始化时候会自动的调用这些方法进行相对应的初始化。
在<bean></bean>中指明属性:init-method、destroy-method的值并在相对应的bean中实现相对应的方法。在当bean欲被初始化时候,会自动的调用这些方法进行想对应的方法进行初始化操作。
在<beans></beans>中指明属性default-init-method、default-destroy-method的值并在相对应的bean中实现相对应的方法。此方法是给该标签内的所有bean都给予声明构默认的初始化方法。在指明了这些属性的<beans></beans>标签中,<bean>中的属性init-method、destroy-method没有被重新制定且相对应的bean中也没有实现InitializingBean,DisposableBean这接口,就会调用默认的初始化、销毁的方法进行相对应的初始化与销毁。倘若在每一个<bean></bean>中都以重新指定了init-method、destroy-method属性或者相对应的bean以实现接口InitializingBean,DisposableBean,<beans></beans>中指明属性default-init-method、default-destroy-method相对应的方法就不会起到任何作用了,即使是没有实现这些方法也没有任何的影响。
问题来了,当构造方法与自定义的三种方法同时存在时候,他们的先后顺序是怎么一个样的呢?
实例说话:
Spring配置文件Xxx.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans default-init-method="defaultInit" default-destroy-method="defauleDestroy"> <bean id="bc" class="com.usc.geowind.lilin.bean.life.BCGame" init-method="init" destroy-method="stop" /> <bean id="cp" class="com.usc.geowind.lilin.bean.life.CPGame" init-method="init" destroy-method="stop" /> <bean id="play" class="com.usc.geowind.lilin.bean.life.Paly"> <property name="iGame" ref="cp"></property> </bean> </beans>
bean类:
public class CPGame implements IGame, InitializingBean, DisposableBean { public CPGame() { System.out.println("init CPGame by CPGame()!"); } public void init() { System.out.println("init CPGame by init()"); } public void stop() { System.out.println("CPGame stop"); } @Override public void play() { System.out.println("paly CP !"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("init CPGame by afterPropertiesSet() "); } @Override public void destroy() throws Exception { System.out.println("CPGame destroy"); } public void defaultInit() { System.out.println("init BCGame by defaultInit()"); } public void defauleDestroy() { System.out.println("BCGame defauleDestroy()"); } }
实例运行的现货顺序:
从打印的顺序可以看出来:构造方法还是首当其冲的,再到实现接口的方法,bean标签中自定义的初始化方法。然而,在<beans>标签中的默认初始化与销毁的方法没有起到任何的作用,是因为在<bena>中重新自定义了初始化的标签或者实现了初始化的接口。
相关推荐
实现`BeanPostProcessor`接口可以让开发者在Bean生命周期的关键时刻插入自定义逻辑,比如验证、缓存管理、AOP代理等。这提供了高度的灵活性,但同时也需要谨慎处理,因为不恰当的处理可能会影响到整个应用的性能和...
在SSH整合中,Spring主要负责业务逻辑的管理,包括Bean的生命周期管理、事务控制以及与其它框架的集成。 2. **Hibernate框架**:Hibernate是一个对象关系映射(Object-Relational Mapping, ORM)工具,它简化了...
- **容器**:Spring作为容器管理着应用对象的配置和生命周期,能够配置每个bean的创建方式(如基于原型或单例模式)以及它们之间的依赖关系。虽然Spring是一种容器,但其轻量级的特性使其与传统重量级的EJB容器有着...
通过这样的配置,Spring会自动管理这些bean的生命周期,包括初始化、依赖注入以及销毁等过程。 此外,Spring还支持基于注解的配置,使得代码更加简洁,无需大量XML配置。 总之,Spring框架提供了强大的功能,包括...
首先,Spring框架作为核心容器,负责管理应用对象的生命周期和依赖关系。在Spring 3.1中,我们可以使用XML配置或注解来定义bean的创建和装配。对于数据库操作,Spring提供JdbcTemplate和HibernateTemplate,或者更...
它包含Bean的XML和注解配置解析,以及对Bean的生命周期管理。 3. **Spring Context**: - `spring-context.jar`:Spring上下文模块,扩展了Spring Core的功能,提供了一种环境感知的容器,可以加载配置并提供事件...
2. **Spring的Bean容器**: Spring 通过Bean容器管理应用对象的生命周期和依赖关系。开发者可以定义Bean的配置,Spring会自动创建、初始化、装配并管理这些Bean。 3. **SSH2**: SSH2 提供了加密的网络通信,使得远程...
在SSH项目中,Spring主要负责管理Bean的生命周期,整合其他框架,以及提供事务管理。 5. **Spring配置**:配置Spring涉及创建`beans.xml`或`applicationContext.xml`文件,定义Bean的实例化、属性注入、以及它们...
Spring框架则是企业级应用的核心容器,它管理着应用对象的生命周期和依赖关系。Spring提供了IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)两大核心功能。IOC使得对象的...
在Spring框架中,Bean的作用域是管理对象生命周期和作用范围的关键概念。Bean的定义通常包含在XML配置文件中,通过`<bean>`标签进行配置。当我们谈论"SSH笔记-bean的作用域"时,这里SSH指的是Spring、Struts和...
- **作用**:通过Spring容器管理对象的生命周期和依赖关系,开发者无需显式地创建对象。 - **实现方式**:通常通过XML配置文件或注解来配置和管理Bean(对象)。 ##### 2. DI(Dependency Injection 依赖注入) - ...
Spring框架是SSH的核心,它提供了容器来管理对象的生命周期和依赖关系。Spring的IoC容器允许开发者声明性地配置和组装对象,解耦了组件之间的依赖,使得代码更加灵活和易于测试。同时,Spring的AOP模块则允许开发者...
1. `org.springframework.beans-3.1.0.M2.jar`:这是Spring的Beans模块,提供了IoC(Inversion of Control)容器的基础,支持对象配置、bean的生命周期管理和装配。 2. `org.springframework.context-3.1.0.M2.jar`...
- 执行完业务逻辑后,容器管理Bean的生命周期,包括销毁等操作。 ### 总结 SSH框架中的每个组成部分都发挥着重要作用: - **Struts** 主要负责Web层,处理用户请求和响应。 - **Hibernate** 负责持久层,提供高效...
在SSH整合中,Spring主要负责管理Bean的生命周期和事务控制,以及提供数据访问接口(DAO)的抽象。 1. **依赖注入**:Spring通过XML配置或注解方式实现对象间的依赖关系,降低耦合度。 2. **AOP**:Spring的AOP模块...
Spring的ApplicationContext容器管理着应用中的所有bean,通过XML配置或注解方式实现bean的创建、依赖注入和生命周期管理。 2. **Hibernate框架**: Hibernate是Java领域中最流行的对象关系映射(ORM)工具之一。...
在依赖注入方面,Spring 5继续提供容器管理和bean的生命周期管理。 **Hibernate 5.1** Hibernate 5.1版本带来了性能提升,包括更快的查询解析和优化的缓存策略。它增强了对JPA 2.1规范的支持,提供了更丰富的查询...
它允许开发者管理对象的生命周期和依赖关系,降低了组件之间的耦合度。在SSH项目中,Spring主要负责: 1. **Bean管理**:通过XML配置或注解定义Bean,Spring会自动创建和管理这些Bean。 2. **事务管理**:Spring...
1. **依赖注入**:Spring通过容器管理Bean的生命周期,将依赖的对象注入到需要的地方,降低了组件间的耦合度。 2. **事务管理**:Spring提供了声明式事务管理,只需在配置文件中声明事务边界,即可自动处理事务的...