`

spring BeanFactory学习

 
阅读更多

文章来自于:http://jijun87120681.iteye.com/blog/1397377

 

Spring的IOC容器就是一个实现了BeanFactory接口的可实例化类。

    BeanFactory从名字上都可以看出,采用了工厂模式。应用程序将Bean的创建交给Beanfactory,然后从BeanFactory获取Bean并使用它们,流程图如下:


 

Bean初始化流程:

(1)容器根据XML配置文件中Bean的定义实例化一个Bean,并传入必要的构造方法参数。

(2)容器根据XML配置文件使用设置Bean的属性

(3)如果Bean实现了BeanNameAware接口,调用其setBeanName()方法

(4)如果Bean实现了BeanClassLoaderAware接口,调用其setBeanClassLoader()方法

(5)如果Bean实现了BeanFactoryAware接口,调用其setBeanFactory()方法

(6)如果使用ApplicationContext并且Bean实现了ResourceLoaderAware接口,调用其setResourceLoader()方法

(7)如果使用ApplicationContext并且Bean实现了ApplicationEventPublisherAware接口,调用其setApplicationEventPublisher()方法

(8)如果使用ApplicationContext并且Bean实现了MessageSourceAware接口,调用其setMessageSource()方法

(9)如果使用ApplicationContext并且Bean实现了ApplicationContextAware接口,调用其setApplicationContext()方法

(10)如果使用WebApplicationContext并且Bean实现了ServletContextAware接口,调用其setServletContext()方法,仅对Web应用程序有效

(11)如果关联了BeanPostProcessor,调用BeanPostProcessor的postProcessBeforeInitialization()方法

(12)如果实现了InitializingBean接口,调用其afterPropertiesSet()方法执行一些初始化工作

(13)如果Bean定义了init-method方法,调用这个方法执行一些初始化工作

(14)如果关联了BeanPostProcessor,调用BeanPostProcessor的postProcessAfterInitialization()方法

执行完上述步骤,Bean就处于就绪状态,可以从spring容器中获取了

 

Bean的销毁流程:

(1)如果Bean实现了DisposableBean接口,调用其destroy()方法执行资源清理等工作

(2)如果Bean定义了destroy-method方法,调用这个方法执行资源清理等工作

 

Bean的流程可以从BeanFactory源代码注释中完全看出来:

 

 

Java代码  收藏代码
  1. /* <p>Bean factory implementations should support the standard bean lifecycle interfaces  
  2.  * as far as possible. The full set of initialization methods and their standard order is:<br>  
  3.  * 1. BeanNameAware's <code>setBeanName</code><br>  
  4.  * 2. BeanClassLoaderAware's <code>setBeanClassLoader</code><br>  
  5.  * 3. BeanFactoryAware's <code>setBeanFactory</code><br>  
  6.  * 4. ResourceLoaderAware's <code>setResourceLoader</code>  
  7.  * (only applicable when running in an application context)<br>  
  8.  * 5. ApplicationEventPublisherAware's <code>setApplicationEventPublisher</code>  
  9.  * (only applicable when running in an application context)<br>  
  10.  * 6. MessageSourceAware's <code>setMessageSource</code>  
  11.  * (only applicable when running in an application context)<br>  
  12.  * 7. ApplicationContextAware's <code>setApplicationContext</code>  
  13.  * (only applicable when running in an application context)<br>  
  14.  * 8. ServletContextAware's <code>setServletContext</code>  
  15.  * (only applicable when running in a web application context)<br>  
  16.  * 9. <code>postProcessBeforeInitialization</code> methods of BeanPostProcessors<br>  
  17.  * 10. InitializingBean's <code>afterPropertiesSet</code><br>  
  18.  * 11. a custom init-method definition<br>  
  19.  * 12. <code>postProcessAfterInitialization</code> methods of BeanPostProcessors  
  20.  *  
  21.  * <p>On shutdown of a bean factory, the following lifecycle methods apply:<br>  
  22.  * 1. DisposableBean's <code>destroy</code><br>  
  23.  * 2. a custom destroy-method definition  
  24.  *  
  25.  */   
  26. public   interface  BeanFactory {...}  
 

 

分享到:
评论

相关推荐

    简单了解Spring中BeanFactory与FactoryBean的区别

    主要介绍了简单了解Spring中BeanFactory与FactoryBean的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring核心学习IOC部分

    Spring核心学习IOC部分:从最简单的BeanFactory开始一步步完善类似Spring的功能

    简单了解Spring beanfactory循环依赖命名重复2大属性

    主要介绍了简单了解Spring beanfactory循环依赖命名重复2大属性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring源码学习三:BeanFactory解析1

    BeanFactory是用于访问Spring Bean容器的根接口,是一个单纯的Bean工厂,也就是常说的IOC容器的顶层定义,各种IOC容器是在其基础上为了满

    Spring BeanFactory和FactoryBean区别解析

    主要介绍了Spring BeanFactory和FactoryBean区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring中BeanFactory与FactoryBean接口的区别详解

    主要给大家介绍了关于Spring中BeanFactory与FactoryBean接口的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    Spring学习

    Spring学习,简单理解,帮助大家学习。 Spring由Rod Johnson创建的,开源的轻量级Java开发框架。 于2003年兴起,2016年最高版本是4.3. 有两个目标:让现有的技术更易于使用 促进良好的编程习惯 由7个模块...

    最全的Spring考题与答案

    一共近百道题与完整答案Spring框架的优点都有什么?...spring 中的BeanFactory与ApplicationContext的作用和区别?Spring如何实现资源管理?如何在web应用里面配置spring?。。。。。。 适合面试、学习、总结与复习.

    Spring高级之注解驱动开发视频教程

    学习spring,要有一定的Java基础,同时应用过spring基于xml的配置。(或者学习过官网的Spring课程) 学习springmvc,要有一定java web开发基础。同时对spring框架要有一定了解。 3、课程亮点 系统的学习Spring框架...

    spring课堂笔记.docx

    Spring 容器:介绍了 Spring 容器的不同类型,包括 BeanFactory 和 ApplicationContext,以及它们在管理对象生命周期和依赖注入方面的作用。 依赖注入:详细解释了依赖注入的原理和用法,以及如何配置和管理 Bean ...

    spring源码剖析

    在认真学习Rod.Johnson的三部曲之一:&lt;&lt;Professional Java Development with the spring framework&gt;&gt;,顺便也看了看源代码想知道 个究竟,抛砖引玉,有兴趣的同志一起讨论研究吧! 以下内容引自博客:...

    spring源码分析

    在认真学习Rod.Johnson的三部曲之一:&lt;&lt;Professional Java Development with the spring framework&gt;&gt;,顺便也看了看源代码想知道 个究竟,抛砖引玉,有兴趣的同志一起讨论研究吧! 以下内容引自博客:...

    spring in action英文版

     4.1 学习Spring的DAO理念  4.1.1 理解Spring的DataAccessException  4.1.2 与DataSource一起工作  4.1.3 一致的DAO支持  4.2 在Spring中使用JDBC  4.2.1 JDBC代码的问题  4.2.2 使用...

    tiny-spring-practice:实践tiny-spring,手写Spring两大核心功能:IOC和AOP

    然后发现了多年前的一个精简版的Spring学习项目,叫,作者对spring核心的IOC和AOP进行了临摹实现,也很细心的对实现步骤进行了拆分。我看完了tiny-spring收获许多,自己也参考该项目进行了模仿与实践,从我学习的...

    spring学习笔记

    目录 1.1 Spring 框架学习路线:...........................................................................................................................4 1.2 Spring 框架的概述:...........................

    Spring5.0介绍.pptx

    在学习了书籍Spring5.0后,将自己的理解总结成了ppt,主要包含了IoC 和 DI,AOP,BeanFactory和FactoryBean,事务管理四个方面

    Spring官网阅读(十三)ApplicationContext详解(下)

    在前面两篇文章中,我们已经对ApplicationContext的大部分内容做了介绍,包括国际化,Spring中的运行环境,Spring中的资源,Spring中的事件监听机制,还剩唯一一个BeanFactory相关的内容没有介绍,这篇文章我们就来...

    spring学习资料

    1. public interface BeanFactory { 2. 3. //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象, 4. //如果需要得到工厂本身,需要转义 5. String FACTORY...

    java查看sun包源码-learning-spring:Spring框架讲解

    java查看sun包源码 Spring 学习笔记 IOC 和 DI 的概述 IOC(Inversion of Controll) 思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找...BeanFactory是Spring框架的基础设施,面向Spring本身 A

Global site tag (gtag.js) - Google Analytics