1、使用方式-使用ApplicationContext方式加载XML
@Test
public void testBeanLoader(){
BeanFactory bf = new ClassPathXmlApplicationContext("configuration/spring-test.xml");
}
2、解析ClassPathXmlApplicationContext构造函数:
public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
throws BeansException {
super(parent);
setConfigLocations(configLocations);//设置配置文件信息
if (refresh) {
refresh();//主要的加载bean的过程
}
}
3、refresh方法:
@Override
public void refresh() throws BeansException, IllegalStateException {
synchronized (this.startupShutdownMonitor) {
// 准备刷新上下文环境
prepareRefresh();
// 初始化beanFactory并进行xml文件的读取
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
//对beanfactory进行功能填充
prepareBeanFactory(beanFactory);
try {
// Allows post-processing of the bean factory in context subclasses.
postProcessBeanFactory(beanFactory); //允许beanfactory在上下环境中对子类的后处理
// Invoke factory processors registered as beans in the context.
invokeBeanFactoryPostProcessors(beanFactory); //激活beanfactory
// Register bean processors that intercept bean creation.
registerBeanPostProcessors(beanFactory); //注册bean后处理,此时注册的并不是真正的bean,真正的bean是通过getBean得到的
// Initialize message source for this context.
initMessageSource(); //为上下文初始化message源
// Initialize event multicaster for this context.
initApplicationEventMulticaster(); //初始化应用消息广播器并注册到ApplicationEventMulticaster中
// Initialize other special beans in specific context subclasses.
onRefresh(); //初始化其他上下文中子类中的特殊bean
// Check for listener beans and register them.
registerListeners(); //查找lestenerbean,并注册到消息广播器中
// Instantiate all remaining (non-lazy-init) singletons.
finishBeanFactoryInitialization(beanFactory); //初始化单例
// Last step: publish corresponding event.
finishRefresh(); //初始化完成
}
catch (BeansException ex) {
logger.warn("Exception encountered during context initialization - cancelling refresh attempt", ex);
// Destroy already created singletons to avoid dangling resources.
destroyBeans(); //异常时销毁bean
// Reset 'active' flag.
cancelRefresh(ex);
// Propagate exception to caller.
throw ex;
}
finally {
// Reset common introspection caches in Spring's core, since we
// might not ever need metadata for singleton beans anymore...
resetCommonCaches();
}
}
}
相关推荐
标题《Spring IoC源码深度剖析开源架构源码2021.pdf》和描述《Spring IoC源码深度剖析开源架构源码2021.pdf》表明该文档主要面向于分析Spring框架中控制反转(IoC)容器的核心源码,解析和理解其内部的工作机制及...
Spring IOC,即Inversion of Control(控制反转),是Spring框架的核心特性之一,它负责管理和装配应用程序中的对象。...理解并掌握Spring的IOC源码,对于深入学习Spring框架以及提升系统设计能力具有重要意义。
在提供的 "src" 压缩包文件中,如果包含的是 Spring 框架的源码,那么我们可以详细研究每个类和方法,了解 Spring 如何处理 Bean 的生命周期、解析配置、创建依赖关系等。这将帮助我们成为 Spring 框架的专家,更...
理解Spring IoC容器的工作原理和bean的装配方式对于开发高效、可维护的Spring应用至关重要。通过XML配置或者注解方式,我们可以轻松地控制bean的创建、装配和管理,以及定制bean的行为。而`FactoryBean`和`...
1. **初始化流程**:从`org.springframework.context.support.ClassPathXmlApplicationContext`或`org.springframework.web.context.ContextLoader`开始,理解如何加载配置并创建Bean定义。 2. **依赖注入**:研究`...
1、 需要去构造一个Spring容器:ClassPathXmlApplicationContext; 2、 需要注解定义两个注解:@Service、@Resource; 3、 使用反射的手段读取指定目录下的class信息,解析Class信息; 4、 对Class信息的注解做处理...
在本系列的第一篇中,我们将深入探讨Spring框架的核心特性——依赖注入(Dependency Injection,简称DI),并通过手动实现一个简易的IOC容器来理解其工作原理。Spring框架是Java开发中的基石,它提供了许多功能,如...
通过设置资源解析器和环境、设置配置路径、初始化 BeanFactory、加载 Bean 定义资源、解析 Bean 定义资源和注册 BeanDefinition,这些步骤组成了 IOC 初始化流程。 在 Spring 框架中,IOC 容器是核心组件,负责管理...
- `spring-core-4.2.5.RELEASE.jar`:包含了Spring的基础工具类和基本的IoC容器,如ClassPathXmlApplicationContext和BeanFactory。 - `spring-beans-4.2.5.RELEASE.jar`:处理bean的创建、配置和管理,支持XML和...
**Spring IOC 笔记** Spring 框架是 Java 应用开发中的核心框架,它引入了控制反转(Inversion of Control,简称 IOC)和依赖注入(Dependency Injection,简称 DI)的概念,极大地简化了组件之间的依赖关系管理。...
《Spring Framework 4.2.3.RELEASE 源码深度解析》 Spring Framework作为Java领域最广泛应用的轻量级框架之一,其4.2.3.RELEASE版本是该框架发展历史上的一个重要里程碑。深入理解Spring Framework的源码,不仅能够...
通过阅读`DefaultListableBeanFactory`和`ClassPathXmlApplicationContext`的实现,可以理解Spring如何加载和解析bean定义。 关于AOP,`AspectJ`是Spring实现AOP的主要方式,通过`@Aspect`注解定义切面,`@Before`...
`BeanDefinition`是Spring IOC容器中Bean定义的抽象表示,它包含了Bean的所有配置信息。 一旦所有的Bean定义都被解析并注册到BeanDefinitionRegistry(通常是一个`DefaultListableBeanFactory`实例),Spring会开始...
Spring框架是Java开发中最广泛应用的轻量级框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,提供了全面的解决方案,包括数据访问、事务管理、Web...
- **spring-core**:Spring 的核心工具包,提供了 IoC 容器的基础,如 Resource 接口和 ClassPathXmlApplicationContext 类。 - **spring-web** 和 **spring-webmvc**:分别对应了 Web 应用的支持和 MVC 框架的实现...
在Spring初始化这个Bean时,`ClassPathXmlApplicationContext`或者`FileSystemXmlApplicationContext`会解析XML配置,创建Bean定义,并调用`BeanFactoryPostProcessor`进行预处理。然后,`...
`ClassPathXmlApplicationContext`是Spring框架中用于加载和管理配置元数据的核心类,它允许我们通过XML文件来定义和初始化Bean。在Java应用中,Spring作为一个依赖注入(DI)和面向切面编程(AOP)的框架,极大地...
Spring 源码解析系列将深入探讨 Spring 框架的核心机制,特别是 IOC(Inversion of Control,控制反转)和 AOP(Aspect Oriented Programming,面向切面编程)的实现。本文首先关注的是 Spring 中的 IOC 容器,它是...
了解并实现Spring容器不仅能帮助我们更好地理解和使用Spring框架,还能为自定义IoC容器或扩展现有项目提供基础。通过阅读和实践`MySpring`中的代码,我们可以更深入地学习Spring的内部工作原理,提升我们的编程技能...