Spring框架实例Bean的生命周期及作用域

with 0 comment

Spring框架的核心在于对实例Bean的管理,学习和理解Spring框架实例Bean的生命周期以及作用域,将有利于我们对于Spring框架的理解和应用。

Bean的作用域

关于Spring框架Bean的作用域,实际是根据Bean的实例类型进行区分。
Bean的实例类型则是通过配置Bean是指定的scope属性来表示单例还是多例。
XML配置方案

<!-- scope默认singleton单例;prototype原型,多例 -->
<Bean id="user" scope="singleton" class="com.mebugs.uesr.Bean.User" ></Bean>

注解方案

@Component("user")
//指定为singleton单例;prototype原型,多例
@Scope("prototype")
public class User
{
    ...
}

Spring框架在默认情况下应用上下文中所有Bean都是作为以单例(singleton)的形式创建的。
不管给定的一个Bean被注入到其他Bean多少次,每次所注入的都是同一个实例。
大多数情况下,单例Bean是很理想的方案。
Spring框架中实际定义了多种Bean作用域,可以基于这些作用域创建Bean,包括:

单例(Singleton)

原型(Prototype)

会话(Session)

请求(Rquest)

Bean的生命周期

了解Spring框架中实例Bean的生命周期,主要看一个实例Bean从创建到销毁的完整过程。

spring_bean_life.jpg

Bean的初始化
Spring框架对Bean进行实例化;
Spring框架将值和Bean的引用注入到Bean对应的属性中;

如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBean-Name()方法;
如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;
如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将Bean所在的应用上下文的引用传入进来;
如果Bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessBeforeInitialization()方法;
如果Bean实现了InitializingBean接口,Spring将调用它们的after-PropertiesSet()方法;
如果Bean使用init-method声明了初始化方法,该方法也会被调用;
如果Bean实现了BeanPostProcessor接口,Spring将调用它们的post-ProcessAfterInitialization()方法;

Bean的应用周期
Bean已经准备就绪,可以被应用程序使用了;
它们将一直驻留在应用上下文中,直到该应用上下文被销毁;

Bean的销毁
如果Bean实现了DisposableBean接口,Spring将调用它的destroy()接口方法;
如果Bean使用destroy-method声明了销毁方法,该方法也会被调用;

备注:申明方法实际就是程序猿自行定义的方法,可以在XML配置文件中指定。

Responses