Spring:IOC容器Bean的生命周期的int和destro方法详解(4)
Bean的生命周期
1)实例化Bean
对于BeanFactory容器,当客户向容器请求一个未初始化的bean时,或初始化bean的时候需要注入另一个未初始化的依赖时,容器就会调用createBean进行实例化,对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有Bean
2)设置对象属性(依赖注入)
实例化后的对象被封装在BeanWrapper对象中,之后Spring根据BeanDefiniton中的信息以及通过BeanWrapper提供的设置属性的接口完成依赖注入
3)处理Aware接口
接着Spring会检测该对象是否实现了Aware接口,并将相关的Aware实例注入给Bean
①如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String beanld)方法,此处传递的就是Spring配置文件中Bean的id值
②如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,传递的时Spring工厂自身
③如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文
4)BeanPostProcessor
如果想对Bean进行一些自定义的处理,那么可以让Bean实现BeanPostProcessor接口,会调用postProcessBeforeInitialization(Object obj,String s)方法
5)InitializingBean与init-method
如果这个Bean在Spring配置文件中配置了init-method属性,则会自动调用其它配置的初始化方法
6)如果这个Bean实现了BeanPostProcessor接口,将会调用 postProcessAfterInitialization方法;由于这个方法是在Bean初始化结束时调用的,所以可以被应用在内存或缓存技术
以上几个步骤完成后,Bean就被完全创建了,之后就可以使用这个Bean了
7)DisposableBean
当Bean不需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其它实现的destroy方法
8)detroy-method
最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用配置的销毁方法
示例
Step1:修改实体对象
新增三个方法,在实体里加和其它业务层类加是一样的,这里只是演示执行流程
/*** 视频对象*/
public class Video {private int id;private String title;private Video(){System.out.println("video 空构造函数被调用");}/*** 初始化操作*/public void init(){System.out.println("video 类 init方法被调用");}/*** 销毁操作*/public void destroy(){System.out.println("video 类 destroy方法被调用");}}
Step2:bean对象配置
<!--init-method:指定初始方法destroy-method:指定销毁方法--><bean id="video" class="net.jhclass.project.domain.Video" scope="singleton" init-method="init" destroy-method="destroy"><property name="id" value="9"/><property name="title" value="测试Spring注入"/></bean>
Step3:测试
直接获取Bean对象即可
public class App {public static void main(String [] args){//获取Bean 配置文件名称ApplicationContext applicationContext =new ClassPathXmlApplicationContext("applicationContext.xml");//获取bean对象Video video1 =(Video) applicationContext.getBean("video");System.out.println(video1.getTitle());//调用钩子函数destroy操作((ClassPathXmlApplicationContext) applicationContext).registerShutdownHook();}
}
Spring:IOC容器Bean的生命周期的int和destro方法详解(4)相关推荐
- Spring IOC:bean的生命周期与@Autowire(1)
全系列文章: <Spring IOC:bean的生命周期与@Autowire(1)> <Spring IOC:bean的生命周期与@Autowire(2)> <Sprin ...
- Spring IOC容器-Bean管理——基于XML方式
Spring IOC容器-Bean管理--基于XML(续集) 1.IOC 操作 Bean 管理(FactoryBean) 1).Spring 有两种类型 bean,一种普通 bean,另外一种工厂 ...
- (转)Spring管理的Bean的生命周期
http://blog.csdn.net/yerenyuan_pku/article/details/52834011 bean的初始化时机 前面讲解了Spring容器管理的bean的作用域.接着我们 ...
- 阐述Spring框架中Bean的生命周期?
① Spring IoC容器找到关于Bean的定义并实例化该Bean. ② Spring IoC容器对Bean进行依赖注入. ③ 如果Bean实现了BeanNameAware接口,则将该Bean的id ...
- 【面试题】Spring框架中Bean的生命周期
生命周期 1.实例化一个Bean--也就是我们常说的new一个对象: 2.按照Spring上下文对实例化的Bean进行配置--也就是IOC注入: 3.如果这个Bean已经实现了BeanNameAwar ...
- Spring框架中bean的生命周期
ean在Spring容器中从创建到销毁经历了若干阶段,每一阶段都可以针对Spring如何管理bean进行个性化定制. 正如你所见,在bean准备就绪之前,bean工厂执行了若干启动步骤. 我们对上图进 ...
- 再见面试官:你能说说 Spring 框架中 Bean 的生命周期吗?
首先简单说一下(以下为一个回答的参考模板) 1.实例化一个Bean--也就是我们常说的new: 2.按照Spring上下文对实例化的Bean进行配置--也就是IOC注入: 3.如果这个Bean已经实现 ...
- Spring中的Bean的生命周期
1.Spring对bean进行实例化 2.Spring将和bean的引用注入到bean对应属性中 3.如果bean实现了BeanNameAware接口,Spring将bean的ID的传递给setBea ...
- spring IOC容器 Bean 管理——基于注解方式
IOC 操作 Bean 管理(基于注解方式) 1.什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值-) (2)使用注解,注解作用在类上面,方法上面, ...
最新文章
- # Ubuntu 配置自带vnc桌面共享
- 【Unix 网络编程】TCP状态转换图详解
- HTML页面显示缩略所有空格为一格的方法
- 10行代码AC——1016 部分A+B (15分)
- cv岗工作做什么_职场速递:我应该做什么工作?
- 配置多台机器SSH相互通信信任
- [20个项目学会BBC micro:bit编程] 12-蜂鸣器控制
- 百度硬盘搜索结盟IBM,Lotus邮件也能搜索
- 计算机桌面常用图标,电脑常用软件图标 常用的电脑软件图标
- 计算机光盘无法格式化,c盘无法格式化怎么办 c盘无法格式化的解决方法
- UTC时间转化为北京时间
- 三维激光扫描后处理软件_地面三维激光扫描仪应用之一|云尚智造
- 用python画气球程序_动态编程气球最大得分(Python实现),规划,打,的,分数,python...
- PyTorch中通过torch.save保存模型和torch.load加载模型介绍
- zillow房价预测比赛_如何看待 Kaggle 发布的 Zillow 房价预测比赛?
- iOS开发——openssl生成CSR (pkcs10) 请求证书
- 如何在iPhone之间共享您的Wi-Fi密码?
- 总结篇:消息中间件MQ的学习境界和路线
- C语言int 类型的表示范围 sizeof()函数
- android LeanCloud SDK部署