spring bean 中的init-method和destroy-method (带示例说明)

本文介绍如何在Spring框架中通过配置文件指定Bean的初始化和销毁方法。通过示例演示了如何定义这些方法,并展示了它们在不同作用域下的行为。

在spring中可以通过配置文件或者注解指定,在bean初始化之后要执行的初始化方法,以及在bean销毁时执行的方法。

可以通过下面的例子可以直观的理解一下.

我们首先要建好spring的开发环境,具体参考:http://outofmemory.cn/java/spring/spring-hello-world

我们先建一个Person类:

package cn.outofmemory.spring;

public class Person {
	
	public void initialize() {
		System.out.println("I'm initialized");
	}
	
	public void destroy() {
		System.out.println("I'm destroied");
	}
	
	public void doSomething() {
		;
	}
}

个类中定义了三个方法,分别为initialize,destory和doSomething。顾名思义,initialize是希望在类初始化时执行,而destroy方法则是希望在bean销毁时执行。

spring配置文件如下:

<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">	
	<bean class="cn.outofmemory.spring.Person" init-method="initialize" destroy-method="destroy">
	</bean>	
</beans>

bean中我们通过了init-method和destroy-method属性,指定了在初始化和销毁时要执行的方法。

App类代码如下:

package cn.outofmemory.spring;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Hello world!
 * 
 */
public class App {
	public static void main(String[] args) {
		ApplicationContext appContext = new ClassPathXmlApplicationContext("/spring.xml");
		Person p = appContext.getBean(Person.class);
		((ClassPathXmlApplicationContext) appContext).close();
		System.out.println("exit.");
	}
}

在App类的main方法中,我们首先初始化了ApplicationContext实例,然后从appContext中获得了我们配置的Person bean,然后将appContext关闭,最后退出了程序。

我们看下输出:

I'm initialized
I'm destroied
exit.

可以看到输出了Person类的初始化和销毁方法所做的输出。这里需要注意初始化方法会在bean初始化时执行,如果bean的scope是prototype,那么会在每一次bean初始化时都会执行,如果是singleton,那么只在第一次初始化时执行。而scope为singleton的bean的destroy方法则是在容器关闭时执行,而scope为prototype的bean是不会执行destroy方法的,这是spring设计使然,要特别注意。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值