`
孔雀王子
  • 浏览: 42211 次
  • 性别: Icon_minigender_1
  • 来自: 河北
文章分类
社区版块
存档分类
最新评论

Spring应用(三)Bean的生命周期

阅读更多

Spring容器通过配置可以实现对每个 bean初始化时的查找和销毁时的回调调用。这也就是说,一个应用的开发者可以借助于初始化的回调方法init() 轻松的写一个类(不必像XML配置文件那样为每个bean都配置一个'init-method="init"'属性)。Spring IoC容器在创建bean的时候将自动调用这个方法。

为了完全弄清如何使用该特性,让我们看一个例子。

首先,创建一个Bean

package cn.csdn.cycle;
public class CycleLife {
		private String var;
		public void setVar(String var) {
			this.var = var;
		}
		public void display() {
			System.out.println("J2EE Spring:" + var);
		}
		public void init() {
			System.out.println("调用初始化方法init()....");
		}
		public void destroy() {
			System.out.println("调用销毁方法destroy()....");
		}
}

 

其次,在xml文件中对你创建的Bean进行相应的配置,这里我将xml文件取名为applicationContext.xml

<bean id="cle" class="cn.csdn.cycle.CycleLife" init-method="init"
		destroy-method="destroy">
		<property name="var">
			<value>Hello</value>
		</property>
</bean>
 

第三,新建一个JUnit用例测试你的应用(当然,你亦可以创建一个含有main()方法的Java类测试)

@Test
public void test() {
	ApplicationContext ac = new ClassPathXmlApplicationContext(
new String[] { "application*.xml" }); //执行此行代码时即调用init()方法
	CycleLife cle = (CycleLife) ac.getBean("cle");
cle.display();
//注意下面的代码,它主要用来调用destroy()方法
AbstractApplicationContext aac = (AbstractApplicationContext) ac;
	aac.close();
}

 

使用这个功能可以把你从为每个bean指定初始化和销毁回调的繁杂工作中解救出来。为了一致性,应该强制性的为初始化和销毁回调方法采用一致的命名规则。

在前面的基础上,我们再来分析一下实现了BeanPostProcessor接口的Bean的生命周期。同样,举例来加以说明。

首先呢,我们创建三个JavaBean,第一个同上面的CycleLife.java,这里只创建另外两个,TempService.java代码清单如下:

 

package cn.csdn.cycle;
public class TempService {
	private String str;
	public void setStr(String str) {
		this.str = str;
	}
	public void init() {
		System.out.println("这是TempService:" + str);
	}
}
PostService.java代码清单:
package cn.csdn.cycle;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class PostService implements BeanPostProcessor {
	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName)
			throws BeansException {
		System.out.println("postProcessAfterInitialization");
		return bean;
	}
	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName)
			throws BeansException {
		System.out.println("postProcessBeforeInitialization");
		if (bean instanceof TempService) {
			((TempService) bean).setStr("sxpgog");
		}
		return bean;
	}
}

 

applicationContext.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<bean id="ps" class="cn.csdn.cycle.PostService"></bean>
	<bean id="ts" class="cn.csdn.cycle.TempService" init-method="init"></bean>
	<bean id="cle" class="cn.csdn.cycle.CycleLife" init-method="init"
		destroy-method="destroy">
		<property name="var">
			<value>^_^</value>
		</property>
	</bean>
</beans>

 

测试代码同上面的JUnit用例,这里我就不再写了。执行后的效果如下:

postProcessBeforeInitialization

这是TempServicesxpgog

postProcessAfterInitialization

postProcessBeforeInitialization

调用初始化方法init()....

postProcessAfterInitialization

J2EE Spring^_^

调用销毁方法destroy()....

从上面的案例中我们不难发现,postProcessBeforeInitialization()方法是在init()方法之前执行。也就是说,在IoCBean进行初始化之前我们还可以做一些前期的处理,例如在上面的postProcessBeforeInitialization()方法中我们对Bean中的str进行赋值(重新赋值)的操作,这也从另外一个方面说明,postProcessBeforeInitialization()方法在setter()方法之前执行。

 

0
3
分享到:
评论

相关推荐

    spring bean的生命周期

    - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **注解配置**:使用`@Component`,`@Service`,`@Repository`和`@Controller`注解标记类,配合`@...

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

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

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    在Spring框架中,Bean的生命周期管理和ApplicationContext的应用是两个核心概念,它们对于理解Spring如何管理和协调应用中的对象至关重要。本文将深入探讨这两个主题,并结合国际化(i18n)和事件传递来阐述它们在...

    Spring bean生命周期demo

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

    Spring的bean生命周期

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

    Spring Bean生命周期.pdf

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

    spring bean的生命周期测试代码

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

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

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

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

    Spring Bean 生命周期是 Spring 框架中的一个核心概念,了解 Spring Bean 的生命周期对我们了解整个 Spring 框架会有很大的帮助。本文将详细介绍 Spring Bean 生命周期的概念、生命周期图、生命周期阶段、生命周期...

    SpringBean的生命周期.mdj

    SpringBean的生命周期.mdj

    Spring管理的Bean的生命周期

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

    第二十章 Spring 应用上下文生命周期(ApplicationContext Lifecycle)1

    在Spring框架中,ApplicationContext是应用的核心,它管理着所有Bean的生命周期。本章将深入探讨Spring应用上下文的生命周期,从启动准备阶段到关闭阶段,包括各个关键步骤和相关组件的作用。 1. **Spring 应用上...

    Spring Bean生命周期&BeanDefinitions1

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

    Spring Bean 的生命周期

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

    spring中bean的生命周期详解

    "Spring中Bean的生命周期详解" Spring框架是当前Java EE开发中最流行的框架之一,Spring框架中Bean的生命周期是指从创建到销毁的整个过程。...只有深入了解Bean的生命周期,才能更好地使用Spring框架开发应用程序。

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

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

    spring bean life cycle

    了解和掌握Bean生命周期对于开发高质量的Spring应用至关重要。以下是对Spring Bean生命周期的详细解析。 首先,Bean的生命周期可以分为四个主要阶段: 1. **实例化**:Spring容器在遇到一个Bean定义时,会通过反射...

    Spring Bean 的生命周期.docx

    这两个后处理器接口提供了灵活的扩展点,允许开发者在Bean生命周期的关键点进行自定义操作。 ApplicationContext是BeanFactory的升级版,提供了更丰富的功能,包括事件发布、国际化等。在ApplicationContext中,...

Global site tag (gtag.js) - Google Analytics