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源代码注释中完全看出来:
/* <p>Bean factory implementations should support the standard bean lifecycle interfaces
* as far as possible. The full set of initialization methods and their standard order is:<br>
* 1. BeanNameAware's <code>setBeanName</code><br>
* 2. BeanClassLoaderAware's <code>setBeanClassLoader</code><br>
* 3. BeanFactoryAware's <code>setBeanFactory</code><br>
* 4. ResourceLoaderAware's <code>setResourceLoader</code>
* (only applicable when running in an application context)<br>
* 5. ApplicationEventPublisherAware's <code>setApplicationEventPublisher</code>
* (only applicable when running in an application context)<br>
* 6. MessageSourceAware's <code>setMessageSource</code>
* (only applicable when running in an application context)<br>
* 7. ApplicationContextAware's <code>setApplicationContext</code>
* (only applicable when running in an application context)<br>
* 8. ServletContextAware's <code>setServletContext</code>
* (only applicable when running in a web application context)<br>
* 9. <code>postProcessBeforeInitialization</code> methods of BeanPostProcessors<br>
* 10. InitializingBean's <code>afterPropertiesSet</code><br>
* 11. a custom init-method definition<br>
* 12. <code>postProcessAfterInitialization</code> methods of BeanPostProcessors
*
* <p>On shutdown of a bean factory, the following lifecycle methods apply:<br>
* 1. DisposableBean's <code>destroy</code><br>
* 2. a custom destroy-method definition
*
*/
public interface BeanFactory {...}
- 大小: 58.9 KB
分享到:
相关推荐
《Spring框架中的IOC容器与XML配置详解》 在软件开发领域,Spring框架以其强大的依赖注入(Dependency ...在后续的学习中,进一步探索Spring的AOP、事务管理等功能,将有助于提升你的开发技能和项目实施能力。
核心容器包括Bean工厂(BeanFactory)和ApplicationContext,它们是Spring的核心,负责对象的创建、管理及依赖注入。 在`spring-framework-5.1.4.RELEASE-docs.zip`中,我们可以找到详细的API文档和用户指南,这些...
深入学习Spring源码,不仅能够帮助我们理解其工作原理,还能提升我们在实际项目中的问题排查能力。例如,当我们遇到Spring的依赖注入问题时,可以通过查看`BeanFactory`和`ApplicationContext`的相关源码来定位问题...
例如,`org.springframework.beans.factory.BeanFactory`接口是Spring容器的核心,负责创建和管理Bean。`BeanPostProcessor`接口允许自定义初始化和销毁Bean的逻辑。而`org.springframework.aop.framework....
通过学习和分析源码,开发者不仅可以提升自身的技术水平,也能更好地利用Spring Framework来构建复杂的企业级应用。而参照文章《https://mp.csdn.net/mdeditor/89521580》提供的指导,可以进一步加深对Spring框架的...
- **spring-framework-4.3.25.RELEASE-docs.zip**:包含了官方文档,是学习和理解Spring框架的重要资源,包括API参考、开发者指南和用户手册。 - **spring-framework-4.3.25.RELEASE-schema.zip**:提供了Spring ...
1. **核心容器**:这是Spring框架的基础,包括Bean工厂(BeanFactory)和应用上下文(ApplicationContext)。BeanFactory负责创建、管理对象,而ApplicationContext则增加了国际化、事件传播、AOP代理等功能。 2. *...
在源码中,`org.springframework.beans.factory`和`org.springframework.context`这两个包下的类和接口,如`BeanFactory`和`ApplicationContext`,是实现IOC的关键。 **Spring AOP(Aspect Oriented Programming)*...
同时,BeanFactory和ApplicationContext接口是Spring容器的基石,它们管理着对象的生命周期和依赖关系。 其次,Spring的AOP(面向切面编程)在2.5.6版本中也得到支持。AOP允许开发者定义"切面",即跨越多个对象的...
在源码中,我们可以找到关于BeanFactory和ApplicationContext的实现,理解它们如何加载配置、实例化和管理Bean。 4. **AOP(面向切面编程)**:Spring的AOP模块支持声明式事务管理和其他横切关注点,如日志记录、...
“tiny-spring-step-4-config-beanfactory-with-xml.zip”继续深化,讲解了如何通过XML配置文件来配置BeanFactory,包括Bean的定义、属性注入、构造函数注入等,让你全面掌握BeanFactory的配置方式。 第五步,...
通过深入学习和理解Spring Framework 5.1.6.RELEASE的源码,开发者不仅能掌握其工作原理,还能提升解决实际问题的能力,从而在实际项目中更好地利用Spring的特性,编写出更加高效、可维护的代码。
在使用Spring 5.0.2.RELEASE中文注释版时,开发者可以清晰地理解每个类、接口和方法的功能,这对于深入学习和掌握Spring至关重要。例如,`org.springframework.beans.factory.BeanFactory`接口定义了容器的基本操作...
2. BeanFactory:作为ApplicationContext的底层实现,BeanFactory是Spring的核心容器,负责Bean的实例化、配置和管理。它提供了基本的DI功能,但功能相对较少,适合小型项目。 3. AOP(面向切面编程):Spring 1.0...
2. **核心容器**:该模块包含Bean工厂(BeanFactory)和ApplicationContext,它们是Spring的核心。BeanFactory负责对象的创建、管理,而ApplicationContext则提供更高级的上下文功能,如事件传播、国际化等。 3. **...
《Spring框架5.3.29深度...通过深入学习和理解Spring 5.3.29的源码,开发者可以更好地利用其特性,编写出高效、灵活的Java应用。同时,掌握Spring框架的核心原理也有助于开发者在解决实际问题时更有针对性和创造性。
通过对Spring 4.3.2.RELEASE源码的深入研究,我们可以了解其设计理念,学习到如何优雅地管理依赖、实现面向切面编程,以及如何利用Spring构建高效、健壮的Web应用。同时,源码阅读也能帮助我们理解Spring如何与其他...
《深入剖析Spring Framework 5.1.13.RELEASE...通过深入学习Spring Framework 5.1.13.RELEASE的源码,不仅可以提高我们的技术水平,也能帮助我们在实际项目中更好地利用Spring提供的功能,提升软件开发的效率和质量。
**Spring--IOC** Spring框架是Java企业级应用开发中的核心组件,它的全称是Spring Inversion of ...了解和掌握这些知识点,对于初级入门的开发者来说至关重要,能够为后续深入学习和使用Spring框架打下坚实的基础。
`spring-framework-master`源码中,这些模块分布在不同的子目录下,如`spring-context`、`spring-beans`、`spring-aop`等,这为我们学习和研究提供了清晰的组织结构。 2. **Core Container** - `spring-beans`:这...