`
gaosililn
  • 浏览: 73010 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

ssh学习:Spring中Bean的生命周期

 
阅读更多

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>中重新自定义了初始化的标签或者实现了初始化的接口。

  • 大小: 183.6 KB
  • 大小: 5.5 KB
分享到:
评论

相关推荐

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

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

    SSH整合:spring3.2+strut2.3.4+hibernate4.2所需jar包

    在SSH整合中,Spring主要负责业务逻辑的管理,包括Bean的生命周期管理、事务控制以及与其它框架的集成。 2. **Hibernate框架**:Hibernate是一个对象关系映射(Object-Relational Mapping, ORM)工具,它简化了...

    SSH总结之Spring

    - **容器**:Spring作为容器管理着应用对象的配置和生命周期,能够配置每个bean的创建方式(如基于原型或单例模式)以及它们之间的依赖关系。虽然Spring是一种容器,但其轻量级的特性使其与传统重量级的EJB容器有着...

    SSH学习之spring

    通过这样的配置,Spring会自动管理这些bean的生命周期,包括初始化、依赖注入以及销毁等过程。 此外,Spring还支持基于注解的配置,使得代码更加简洁,无需大量XML配置。 总之,Spring框架提供了强大的功能,包括...

    SSH 配置实例: Spring 3.1 + Hibernate 4.2 + Struts 2.3

    首先,Spring框架作为核心容器,负责管理应用对象的生命周期和依赖关系。在Spring 3.1中,我们可以使用XML配置或注解来定义bean的创建和装配。对于数据库操作,Spring提供JdbcTemplate和HibernateTemplate,或者更...

    SSH中Spring所需基本jar包

    它包含Bean的XML和注解配置解析,以及对Bean的生命周期管理。 3. **Spring Context**: - `spring-context.jar`:Spring上下文模块,扩展了Spring Core的功能,提供了一种环境感知的容器,可以加载配置并提供事件...

    SSH2 整合之 spring 2.5.6 jar包

    2. **Spring的Bean容器**: Spring 通过Bean容器管理应用对象的生命周期和依赖关系。开发者可以定义Bean的配置,Spring会自动创建、初始化、装配并管理这些Bean。 3. **SSH2**: SSH2 提供了加密的网络通信,使得远程...

    基于IDEA的SSH项目之二:配置Spring一(第四步结束时的程序包)

    在SSH项目中,Spring主要负责管理Bean的生命周期,整合其他框架,以及提供事务管理。 5. **Spring配置**:配置Spring涉及创建`beans.xml`或`applicationContext.xml`文件,定义Bean的实例化、属性注入、以及它们...

    SSH框架:struts2+spring+hibernate 全部jar包

    Spring框架则是企业级应用的核心容器,它管理着应用对象的生命周期和依赖关系。Spring提供了IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)两大核心功能。IOC使得对象的...

    SSH笔记-bean的作用域

    在Spring框架中,Bean的作用域是管理对象生命周期和作用范围的关键概念。Bean的定义通常包含在XML配置文件中,通过`&lt;bean&gt;`标签进行配置。当我们谈论"SSH笔记-bean的作用域"时,这里SSH指的是Spring、Struts和...

    SSH--Spring详解

    - **作用**:通过Spring容器管理对象的生命周期和依赖关系,开发者无需显式地创建对象。 - **实现方式**:通常通过XML配置文件或注解来配置和管理Bean(对象)。 ##### 2. DI(Dependency Injection 依赖注入) - ...

    Java:SSH-Spring整合struts2&hibernate;框架

    Spring框架是SSH的核心,它提供了容器来管理对象的生命周期和依赖关系。Spring的IoC容器允许开发者声明性地配置和组装对象,解耦了组件之间的依赖,使得代码更加灵活和易于测试。同时,Spring的AOP模块则允许开发者...

    ssh 整合 spring jar

    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`...

    SSH中 struts hibernate spring 各起什么作用

    - 执行完业务逻辑后,容器管理Bean的生命周期,包括销毁等操作。 ### 总结 SSH框架中的每个组成部分都发挥着重要作用: - **Struts** 主要负责Web层,处理用户请求和响应。 - **Hibernate** 负责持久层,提供高效...

    SSH笔记-整合Spring2、Struts2、Hibernate4

    在SSH整合中,Spring主要负责管理Bean的生命周期和事务控制,以及提供数据访问接口(DAO)的抽象。 1. **依赖注入**:Spring通过XML配置或注解方式实现对象间的依赖关系,降低耦合度。 2. **AOP**:Spring的AOP模块...

    SSH框架整合spring4+hibernate4+struts2(终结版)

    Spring的ApplicationContext容器管理着应用中的所有bean,通过XML配置或注解方式实现bean的创建、依赖注入和生命周期管理。 2. **Hibernate框架**: Hibernate是Java领域中最流行的对象关系映射(ORM)工具之一。...

    SSH整合jar包-spring5.0+hibernate5.1+struts2.5

    在依赖注入方面,Spring 5继续提供容器管理和bean的生命周期管理。 **Hibernate 5.1** Hibernate 5.1版本带来了性能提升,包括更快的查询解析和优化的缓存策略。它增强了对JPA 2.1规范的支持,提供了更丰富的查询...

    SSH项目(spring+hibernate+struts2)

    它允许开发者管理对象的生命周期和依赖关系,降低了组件之间的耦合度。在SSH项目中,Spring主要负责: 1. **Bean管理**:通过XML配置或注解定义Bean,Spring会自动创建和管理这些Bean。 2. **事务管理**:Spring...

    实用SSH框架,用Spring来管理hibernate.

    1. **依赖注入**:Spring通过容器管理Bean的生命周期,将依赖的对象注入到需要的地方,降低了组件间的耦合度。 2. **事务管理**:Spring提供了声明式事务管理,只需在配置文件中声明事务边界,即可自动处理事务的...

Global site tag (gtag.js) - Google Analytics