spring中bean的生命周期 bean生命周期面试简单回答
spring生命周期是什么?
spring生命周期只有3个:
spring中bean的生命周期 bean生命周期面试简单回答
spring中bean的生命周期 bean生命周期面试简单回答
1、Spring对Bean进行实例化(相当于程序中的new Xx())。
2、Spring将值和Bean的引用注入进Bean对应的属性中。
3、如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanDactory(BeanFactory bf)方法并把BeanFactory容器实例作为参数传入。
在spring2.0之前bean只有2种作用域即:singleton(单例)、non-singleton(也称prototype),Spring2.0以后,增加了session、request、global session三种专用于Web应用程序上下文的Bean。因此,默认情况下Spring2.0现在有五种类型的Bean。
历史背景:
生命周期评价起源于20世纪60年代,由于能源危机的出现和对产生的巨大冲击,美国和英国相继开展了能源利用的深入研究,生命周期评价的概念和思想逐步形成。值得说明的是,生命周期评价后来在生态环境领域有着广泛的应用。
Spring中Bean的生命周期是怎样的
Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理,一般担当管理者角色的是BeanFactory或ApplicationContext。认识一下Bean的生命周期活动,对更好的利用它有很大的帮助。
下面以BeanFactory为例,说明一个Bean的生命周期活动:
Bean的建立
由BeanFactory读取Bean定义文件,并生成各个实例。
Setter注入
执行Bean的属性依赖注入。
BeanNameAware的setBeanName()
如果Bean类实现了org.springframework.beans.factory.BeanNameAware接口,则执行其setBeanName()方法。
BeanFactoryAware的setBeanFactory()
如果Bean类实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行其setBeanFactory()方法。
BeanPostProcessors的processBeforeInitialization()
容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processBeforeInitialization()方法。
InitializingBean的afterPropertiesSet()
如果Bean类实现了org.springframework.beans.factory.InitializingBean接口,则执行其afterPropertiesSet()方法。
Bean定义文件中定义init-mod
在Bean定义文件中使用“init-mod”属性设定方法名称,如下:
这时会执行initMod()方法,注意,这个方法是不带参数的。
BeanPostProcessors的processAfterInitialization()
容器中如果有实现org.springframework.beans.factory.BeanPostProcessors接口的实例,则任何Bean在初始化之前都会执行这个实例的processAfterInitialization()方法。
DisableBean的destroy()
在容器关闭时,如果Bean类实现了org.springframework.beans.factory.DisableBean接口,则执行它的destroy()方法。
Bean定义文件中定义destroy-mod
在容器关闭时,可以在Bean定义文件中使用“destory-mod”定义的方法
这时会执行destroyMod()方法,注意,这个方法是不带参数的。
以上就是BeanFactory维护的一个Bean的生命周期。下面这个图可能更直观一些:
如果使用ApplicationContext来维护一个Bean的生命周期,则基本上与上边的流程相同,只不过在执行BeanNameAware的setBeanName()后,若有Bean类实现了org.springframework.context.ApplicationContextAware接口,则执行其setApplicationContext()方法,然后再进行BeanPostProcessors的processBeforeInitialization()
实际上,ApplicationContext除了向BeanFactory那样维护容器外,还提供了更加丰富的框架功能,如Bean的消息,处理机制等。
bean的生命周期是什么?
bean 实例的生命周期如下:
1、为了演示spring的生命周期,首先必须要加入spring的相关包。
2、新建一个SpringBoy类 实现BeanNameAware, BeanFactoryAware, InitializingBean, DisableBean
要注意加入相关的包。新建一个processor类,用于处理bean,叫作bean处理器,在xml中作如下配置:
3、分别实现它们的方法。并在方法中加入必须的信息,以便后面理解与观察。
4、在配置文件中配置springboy。指定初使化方法与销毁方法。
相关如下
好处:
Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。例如,可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。
它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。
Spring对工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。
spring中bean的生命周期是怎么样的
spring中bean完整的生命周期:
1,实例化(当我们加载beans.xml文件)实例化到内存。证明:它会调用bean里面的无参构造。
2,设置属性值(调用set方法设置属性)。
3,如果实现了BeanNameAware则调用BeanNameAware接口的setbeanFatroy()方法,获取Bean的id
4,如果实现了BaneFactoryAware则可以获取BeanFactory。,
5,如果实现了ApplicationAware则可以获取ApplicationAware。
6,如果bean和一个后置处理器关联(实现BeanPostProcessor接口),则会自动去调用 tProcessBeforeInitialization
7,如果实现了InitializingBean则会调用afterPropertiesSet方法。
8,如果在配置了
9,如果bean和一个后置处理器关联(实现BeanPostProcessor接口),则会自动去调用 tProcessAfterInitialization
10,使用我们的bean。
11,容器关闭。
12,可以通过实现DisableBean接口来调用destroy()的销毁方法。
13,可以在配置中,
spring bean的完整生命周期是怎么样的?
1、Spring对Bean进行实例化(相当于程序中的new Xx())。
2、Spring将值和Bean的引用注入进Bean对应的属性中。
3、如果Bean实现了BeanNameAware接口,Spring将Bean的ID传递给setBeanName()方法。
(实现BeanNameAware清主要是为了通过Bean的引用来获得Bean的ID,一般业务中是很少有用到Bean的ID的)。
扩展资料
全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。
它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。
Spring对你的工程来说,它不需要一个以上的framework。Spring是潜在地一站式解决方案,定位于与典型应用相关的大部分基础结构。它也涉及到其他framework没有考虑到的内容。
ja spring框架中,bean的生命周期是什么?
Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean。
Bean的完整生命周期经历了各种方法调用,这些方法可以划分为以下几类:
Bean自身的方法:这个包括了Bean本身调用的方法和通过配置文件中
Bean级生命周期接口方法:这个包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiableBean这些接口的方法。
容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现,一般称它们的实现类为“后处理器”。
工厂后处理器接口方法:这个包括了AspectJWeingEnabler,ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。
参考资料
生命周期.bean[引用时间2018-1-9]
spring bean的生命周期是什么?
总共分为4个阶段:
一阶段:Bean的实例化和DI(dependency injection)。
二阶段:检查Spring Awareness。
三阶段:创建bean生命周期回调。
四阶段:销毁bean生命周期回调。
概念产生:
Spring认证框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。
Spring是Ja EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在 2002 年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,实现敏捷开发的应用型框架 。
以上内容参考:百度百科-Spring认证
Bean的生命周期
当一个对象被Spring所管理,那么它的生命周期就完全由容器所控制。Bean的生命周期从大的方面来分可以分为以下四个阶段:
1. 实例化
2. 属性赋值
3. 初始化
4. 销毁
这样的划分是比较笼统的,接下来就从细分的角度来的Bean的生命周期做一个详细的阐述。
我们知道在Ja中万物皆对象,而在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容器初始化,UserServ被初始化,也就调用了UserServ所实现的BeanNameAware接口的setBeanName方法。在Spring中这样的Aware类型的接口还有很多,以下是常用的Aware相关接口作用说明:
经过以上的几个步骤,bean对象就已经被正确构造了。但是如果你想要对象被使用之前,在进行一些自定义的处理,就可以定制一些初始化方法。初始化方法调用的流程是这样的:
经过以上的工作后,Bean将一直驻留在应用上下文中给应用使用,直到应用上下文被销毁。Bean的销毁有两个方法:执行DisableBean的destroy方法、执行当前对象定义的destroy方法。这两个方法的作用是相同的,都是在Bean实例销毁前执行的方法。
至此,SpringBean的生命周期就结束了。总的来说,Bean的生命周期大的方面可以分为:
实例化 ---- 属性赋值 ----- 初始化 ------ 销毁
细分可以如下图所示:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。