容器主要初始化的入口是wac.refresh() 这里同样是使用了模板模式, 真正refresh()的实现是在AbstractApplicationContext 这个抽象类中实现的:
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// Prepare this context for refreshing.
prepareRefresh();
// Tell the subclass to refresh the internal bean factory.
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
// Prepare the bean factory for use in this context.
prepareBeanFactory(beanFactory);
try {
// Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory);
// Invoke factory processors registered as beans in the context.
invokeBeanFactoryPostProcessors(beanFactory);
// Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory);
// Initialize message source for this context.
initMessageSource();
// Initialize event multicaster for this context.
initApplicationEventMulticaster();
// Initialize other special beans in specific context subclasses.
onRefresh();
// Check for listener beans and register them.
registerListeners();
// Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory);
// Last step: publish corresponding event.
finishRefresh();
}
catch (BeansException ex) {
// Destroy already created singletons to avoid dangling resources.
destroyBeans();
// Reset 'active' flag.
cancelRefresh(ex);
// Propagate exception to caller.
throw ex;
}
}
}
最主要是ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
/**
* Tell the subclass to refresh the internal bean factory.
* @return the fresh BeanFactory instance
* @see #refreshBeanFactory()
* @see #getBeanFactory()
*/
protected ConfigurableListableBeanFactory obtainFreshBeanFactory() {
//refreshBeanFactory这个方法在这里没有实现,由起子类AbstractRefreshableApplicationContext,
//GenericApplicationContext来实现(模板模式)
refreshBeanFactory();
ConfigurableListableBeanFactory beanFactory = getBeanFactory();
if (logger.isDebugEnabled()) {
logger.debug("Bean factory for " + getDisplayName() + ": " + beanFactory);
}
return beanFactory;
}
AbstractRefreshableApplicationContext中的refreshBeanFactory()方法.
分享到:
相关推荐
**Spring3.0源码** 源码可以帮助开发者深入理解Spring的工作原理,学习最佳实践,并根据需要进行定制。源码包含了Spring框架的所有模块,包括IoC(控制反转)容器、AOP代理、事件处理、MVC框架等。通过阅读源码,...
本文将深入探讨Spring 3.0源码,揭示其核心设计理念和实现机制,帮助开发者更好地理解和应用这个强大的框架。 一、IoC(Inversion of Control)容器 Spring的核心是IoC容器,它负责管理对象的生命周期和依赖关系。...
Spring 3.0是Spring框架的一个...结合Maven的使用,开发者不仅可以快速构建项目,还能通过源码学习到框架的精髓,提升自己的技能水平。对于想要深入理解Spring框架的人来说,阅读和研究这些源码无疑是一条有效的途径。
通过对Spring 3.0源码的深入学习,开发者可以更好地理解其内部工作原理,优化自己的代码,解决实际问题,并为升级到更高版本或理解Spring框架后续发展打下坚实基础。通过分析源码,我们可以了解到设计模式的应用,如...
《Spring3.0就这么简单》是一本专注于Spring框架3.0版本的图书,其源代码提供了深入理解Spring工作原理的机会。这本书旨在简化Spring框架的学习过程,通过实例和源码解析,帮助读者快速掌握Spring的核心概念和技术。...
《Spring框架3.0源码解析》 Spring框架作为Java领域中最广泛应用的轻量级框架,其3.0版本在设计模式、模块化和性能优化上都有显著提升。本资料集合了Spring框架3.0的核心源码,为开发者提供了一个深入了解Spring...
在学习Spring 3.0源码时,可以重点关注以下几个方面: - BeanFactory和ApplicationContext接口的实现,了解bean的创建、初始化和依赖注入过程。 - AOP的实现,如Pointcut、Advisor、Proxy等类的交互。 - MVC的...
此外,Spring的事件驱动模型和资源管理也是源码学习的重点。 至于工具应用,Spring 3.0与各种工具的整合是提升开发效率的关键。例如,与Maven或Gradle的集成,简化了项目的构建过程;Eclipse和IntelliJ IDEA的...
《Spring 3.0 就是这么简单》是一本针对初学者和中级开发者的书籍,由陈雄华和林开雄合著。...书中涵盖的内容全面,从基本概念到实战技巧,为读者提供了一个扎实的学习平台,使Spring 3.0变得“就这么简单”。
在Spring 3.0中,IoC(Inversion of Control,控制反转)容器是核心,它负责管理对象的生命周期和依赖关系。另外,Spring AOP允许开发者定义“切面”,实现代码的解耦。Spring MVC是Spring框架的一部分,它提供了一...
3. **IoC容器**:Spring IoC容器是Spring的核心,负责管理对象的生命周期和装配。它可以是BeanFactory或ApplicationContext,前者是基本实现,后者提供更多的企业级功能。 4. **数据访问集成**:Spring支持多种数据...
总的来说,Spring 3.0.2源码的学习是一次宝贵的编程之旅,它揭示了这个强大框架背后的设计思想和实现细节,对于提升Java企业级开发能力具有重要意义。通过阅读和理解源码,开发者能够更好地利用Spring解决实际问题,...
通过分析Spring 3.0源码,我们可以深入了解IoC容器的工作流程、AOP的实现机制以及如何与各种数据访问技术集成。理解这些关键点将有助于你更好地利用Spring框架,编写出更加高效、可维护的代码。在学习源码的过程中,...
《Spring IOC核心技术》是冰河原创的一本专注于Spring IOC核心概念和技术的电子书。Spring作为Java开发领域的重要框架,它的依赖注入(IOC)机制是其核心功能之一,它极大地简化了对象之间的耦合,提高了代码的灵活...
Spring Boot 3.0.2 自动配置(auto-configuration)和启动器(starter)是其核心特性,旨在简化Spring应用程序的开发过程。本篇保姆级教程将带你深入...本教程提供的源码分析和示例将帮助你深入学习并实践这些知识。