【面试题】Spring框架中Bean的生命周期
生命周期
1、实例化一个Bean
--也就是我们常说的new
一个对象;
2、按照Spring
上下文对实例化的Bean
进行配置--也就是IOC
注入;
3、如果这个Bean
已经实现了BeanNameAware
接口,会调用它实现的setBeanName(String)
方法,此处传递的就是Spring
配置文件中Bean
的id
值
4、如果这个Bean
已经实现了BeanFactoryAware
接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)
传递的是Spring
工厂自身(可以用这个方式来获取其它Bean
,只需在Spring
配置文件中配置一个普通的Bean
就可以);
5、如果这个Bean
已经实现了ApplicationContextAware
接口,会调用setApplicationContext(ApplicationContext)
方法,传入Spring
上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext
是BeanFactory
的子接口,有更多的实现方法);
6、如果这个Bean
关联了BeanPostProcessor
接口,将会调用postProcessBeforeInitialization(Object obj, Strings)
方法,BeanPostProcessor
经常被用作是Bean
内容的更改,并且由于这个是在Bean
初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;
7、如果Bean
在Spring
配置文件中配置了init-method
属性会自动调用其配置的初始化方法。
8、如果这个Bean
关联了BeanPostProcessor
接口,将会调用postProcessAfterInitialization(Object obj, String s)
方法、;
注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton,这里我们不做赘述。
9、当Bean
不再需要时,会经过清理阶段,如果Bean
实现了DisposableBean
这个接口,会调用那个其实现的destroy()
方法;
10、最后,如果这个Bean
的Spring
配置中配置了destroy-method
属性,会自动调用其配置的销毁方法。
结合代码理解一下
Bean的定义
Spring
通常通过配置文件定义Bean
。如:
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”><bean id=”HelloWorld” class=”com.pqf.beans.HelloWorld”><property name=”msg”><value>HelloWorld</value></property></bean>
</beans>
这个配置文件就定义了一个标识为 HelloWorld
的Bean
。 在一个配置文档中可以定义多个Bean
。
Bean的初始化
有两种方式初始化Bean
。
1、在配置文档中通过指定init-method 属性来完成
在Bean
的类中实现一个初始化Bean
属性的方法,如init()
,如:
public class HelloWorld{public String msg=null;public Date date=null;public void init() {msg=”HelloWorld”;date=new Date();}……
}
然后,在配置文件中设置init-mothod
属性:
2、实现 org.springframwork.beans.factory.InitializingBean接口
Bean
实现InitializingBean
接口,并且增加 afterPropertiesSet()
方法:
public class HelloWorld implement InitializingBean {public String msg=null;public Date date=null;public void afterPropertiesSet() {msg="向全世界问好!";date=new Date();}……
}
那么,当这个Bean
的所有属性被Spring
的BeanFactory
设置完后,会自动调用afterPropertiesSet()
方法对Bean
进行初始化,于是,配置文件就不用指定 init-method
属性了。
Bean的调用
有三种方式可以得到Bean
并进行调用:
1、使用BeanWrapper
HelloWorld hw=new HelloWorld();
BeanWrapper bw=new BeanWrapperImpl(hw);
bw.setPropertyvalue(”msg”,”HelloWorld”);
system.out.println(bw.getPropertyCalue(”msg”));
2、使用BeanFactory
InputStream is=new FileInputStream(”config.xml”);
XmlBeanFactory factory=new XmlBeanFactory(is);
HelloWorld hw=(HelloWorld) factory.getBean(”HelloWorld”);
system.out.println(hw.getMsg());
3、使用ApplicationConttext
ApplicationContext actx=new FleSystemXmlApplicationContext(”config.xml”);
HelloWorld hw=(HelloWorld) actx.getBean(”HelloWorld”);
System.out.println(hw.getMsg());
Bean的销毁
1、使用配置文件中的 destory-method 属性
与初始化属性 init-methods
类似,在Bean
的类中实现一个撤销Bean
的方法,然后在配置文件中通过 destory-method
指定,那么当bean
销毁时,Spring
将自动调用指定的销毁方法。
2、实现 org.springframwork.bean.factory.DisposebleBean接口
如果实现了DisposebleBean
接口,那么Spring
将自动调用bean
中的Destory
方法进行销毁,所以,Bean
中必须提供Destory
方法。
图解
【面试题】Spring框架中Bean的生命周期相关推荐
- 再见面试官:你能说说 Spring 框架中 Bean 的生命周期吗?
首先简单说一下(以下为一个回答的参考模板) 1.实例化一个Bean--也就是我们常说的new: 2.按照Spring上下文对实例化的Bean进行配置--也就是IOC注入: 3.如果这个Bean已经实现 ...
- Spring框架中bean的生命周期
ean在Spring容器中从创建到销毁经历了若干阶段,每一阶段都可以针对Spring如何管理bean进行个性化定制. 正如你所见,在bean准备就绪之前,bean工厂执行了若干启动步骤. 我们对上图进 ...
- 阐述Spring框架中Bean的生命周期?
① Spring IoC容器找到关于Bean的定义并实例化该Bean. ② Spring IoC容器对Bean进行依赖注入. ③ 如果Bean实现了BeanNameAware接口,则将该Bean的id ...
- IoC基础篇(一)--- Spring容器中Bean的生命周期
IoC基础篇(一)--- Spring容器中Bean的生命周期 日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也 ...
- 面试问题:Spring中Bean 的生命周期
Spring Bean生命周期执行流程 在传统的 Java 应用中,Bean 的生命周期很简单,使用关键字 new 实例化 Bean,当不需要该 Bean 时,由 Java 自动进行垃圾回收. Spr ...
- Spring 中 Bean 的生命周期
本文作者: 伯乐在线 - yemengying 智商捉鸡?,实在没办法一下子理解Spring IoC和AOP的实现原理,看的闹心也不太懂,所以...决定拆成小的不能在小的一个个问题,一点点啃.今天先来 ...
- 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章
前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...
- spring bean生命周期_Spring中bean的生命周期和扩展点有哪些?
前言 今天和大家分享一下Spring中Bean的生命周期的一些知识.先来说一下什么是生命周期吧,生命周期从其语义上理解就是一个对象从产生到销毁的整个过程,之所以把这个过程称为生命周期是因为其就像一个生 ...
- (十)Spring中Bean的生命周期(下)
Spring官网阅读(十)Spring中Bean的生命周期(下) 在上篇文章中,我们已经对Bean的生命周期做了简单的介绍,主要介绍了整个生命周期中的初始化阶段以及基于容器启动停止时LifeCycle ...
最新文章
- 利用人工智能众包数据,加速药物发现
- 英国首相将授权华为接入英国5G网络
- mysql 应用程序优化
- 02-基于注解的入门案例
- Jwt Token 的刷新机制设计
- 崩管嵌入式还是单片机,盘就完事了
- 用perl语言求1到100之间的偶数,奇数及素数
- 类型转换static_cast,dynamic_cast,const_cast,reinterpret_cast等
- pyspider all 只启动了_Python 爬虫:Pyspider 安装与测试
- mysql高并发频繁地写_Mysql写入频繁,怎么破?
- SSL证书下载及部署
- 70周年国庆,34个省级行政区前来祝贺
- Int与byte[]互转详解分析
- 练习-编写求阶乘函数
- POA理论:不要被你的目标欺骗了你
- 微信小程序学习总结(4.wx:if按钮切换)
- 24V交流转换5V直流开关电源的设计及浪涌电流的防护
- poj3208启示录——数位DP
- 华为od机试真题 JS 实现【热点网站统计】
- UNIX 工作站的大规模灭绝