bean的生命周期(spring管理bean的生命周期)

http://www.itjxue.com  2023-02-10 04:40  来源:未知  点击次数: 

bean的生命周期是什么意思?

意思如下:

Spring在创建一个Bean时是分为三个步骤的:实例化,可以理解为new一个对象。属性注入,可以理解为调用setter方法完成属性注入。初始化,你可以按照Spring的规则配置一些初始化的方法。而Bean的生命周期指的就是在上面三个步骤中后置处理器BeanPostprocessor穿插执行的过程。

简介:

Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。

Bean的生命周期

当一个对象被Spring所管理,那么它的生命周期就完全由容器所控制。Bean的生命周期从大的方面来分可以分为以下四个阶段:

1. 实例化

2. 属性赋值

3. 初始化

4. 销毁

这样的划分是比较笼统的,接下来就从细分的角度来的Bean的生命周期做一个详细的阐述。

我们知道在Java中万物皆对象,而在Spring中被Spring管理的对象被称为bean。那么普通的对象是如何变成bean的呢?

首先,Spring会通过BeanDefinitionReader 从XML、注解、配置类或者是其他方式,读取Bean的定义信息,来生成一个 BeanDefinition ,BeanDefinition接口是Spring对Bean的抽象,是用来描述Bean的。其中包含了如:bean名称、是否是单例的、是否懒加载等描述信息。

有了BeanDefinition之后就可以准备生成实例化的对象了,但在这之前还有一步。就是一个对象它可能会有多个构造方法,那Spring如何知道你要生成哪一个构造方法的对象呢?所以,Spring需要 推断构造方法 。

有了构造方法之后,就可以实例化对象了。当用户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用 createBean 进行实例化。注意:此处生成的对象都是空对象,也就是说它的属性都是空的,并没有进行依赖注入。

在这一阶段,Spring就会给实例化出来的对象进行赋值。所以就要用到第一步生成的BeanDefinition,Spring根据BeanDefinition中的信息进行依赖注入。 并且通过BeanWrapper提供的设置属性的接口完成依赖注入。 而在这一步也涉及到了循环依赖这一问题。

Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。如果一个Bean实现了该接口,那么当该Bean被spring初始化时,spring会向该Bean注入相关资源(就是会回调接口中的方法)。以下是对Aware接口作用的一个示例:

可以看到,当Spring容器初始化,UserService被初始化,也就调用了UserService所实现的BeanNameAware接口的setBeanName方法。在Spring中这样的Aware类型的接口还有很多,以下是常用的Aware相关接口作用说明:

经过以上的几个步骤,bean对象就已经被正确构造了。但是如果你想要对象被使用之前,在进行一些自定义的处理,就可以定制一些初始化方法。初始化方法调用的流程是这样的:

经过以上的工作后,Bean将一直驻留在应用上下文中给应用使用,直到应用上下文被销毁。Bean的销毁有两个方法:执行DisposableBean的destroy方法、执行当前对象定义的destroy方法。这两个方法的作用是相同的,都是在Bean实例销毁前执行的方法。

至此,SpringBean的生命周期就结束了。总的来说,Bean的生命周期大的方面可以分为:

实例化 ---- 属性赋值 ----- 初始化 ------ 销毁

细分可以如下图所示:

bean的生命周期是多久?

Bean的生命周期指的是从一个普通的Java类变成Bean的过程,对prototype bean来说,当用户getBean获得prototype bean的实例后,IOC容器就不再对当前实例进行管理,而是把管理权交由用户,此后再getBean生成的是新的实例。

常用接口说明:

1、BeanNameAware该接口只有一个方法setBeanName(String name),用来获取bean的 id或者name。

2、BeanFactoryAware该接口只有一个方法setBeanFactory(BeanFactory beanFactory),用来获取 当前环境中的BeanFactory。

3、ApplicationContextAware该接口只有一个方法setApplicationContext(ApplicationContext applicationContext),用来获取,当前环境中的ApplicationContext获取到IOC容器之后,可以对beans进行修改等操作。

bean的生命周期是什么?

bean 实例的生命周期如下:

1、为了演示spring的生命周期,首先必须要加入spring的相关包。

2、新建一个SpringBoy类 实现BeanNameAware,? ? ? BeanFactoryAware,? ? ? InitializingBean,? ? ? DisposableBean

要注意加入相关的包。新建一个processor类,用于处理bean,叫作bean处理器,在xml中作如下配置:bean class="zpx.life.Processor"/

3、分别实现它们的方法。并在方法中加入必须的信息,以便后面理解与观察。

4、在配置文件中配置springboy。指定初使化方法与销毁方法。

相关如下

好处:

Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。例如,可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。

它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。

Spring对工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。

(责任编辑:IT教学网)

更多

推荐XML/XSLT文章