`

Spring bean初始化(3) - ApplicationContext

 
阅读更多

本节讲 Spring bean初始化(3) - ApplicationContext

ApplicationContext和BeanFactory都是用于加载Bean的,但是项目中基本都是使用ApplicationContext,原因是它包括了BeanFactory的所有功能,并且进行了扩展,ApplicationContext初始化过程中会完成所有的单例( no-lazy-init) 的初始化

ApplicationContext ctx = new ClassPathXmlApplicationContext("/spring-code-test.xml");
SysArgDAO bean = (SysArgDAO) ctx.getBean("sysArgDAO");

 下面看一下 ClassPathXmlApplicationContext 的具体代码实现

public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, ApplicationContext parent)
			throws BeansException {

		super(parent);
                // 支持数组方式传入 xml 配置文件
		setConfigLocations(configLocations);
		if (refresh) {
                        // 核心逻辑
			refresh();
		}
	}

 

 refresh包括了核心逻辑,在类 AbstractApplicationContext 中

 

 

public void refresh() throws BeansException, IllegalStateException {
		synchronized (this.startupShutdownMonitor) {
			// Prepare this context for refreshing.
			prepareRefresh();

			// 这一步会完成 xml载入,并且将属性放入 beanFactory, 完成了 《Spring bean初始化(1)》
			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);

				// 执行 BeanFactoryPostProcessor, 这是 applicationcontext 扩展的功能,保证在bean初始化前做定制
                    // 比如 PropertyPlaceholderConfigurer,就会处理xml中的变量解析替换(比如 <value>${jdbc.url}</value> ),保证bean初始化之前完成
				invokeBeanFactoryPostProcessors(beanFactory);

				// 注册 BeanPostProcessor 方法,可以将配置文件中的 BeanPostProcessor 实现直接注册,方法会在getBean的流程中调用,执行 applicationcontext 定制的方法对bean处理
				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();

				// 实例化所有 non-lazy-init 单例
				finishBeanFactoryInitialization(beanFactory);

				// Last step: publish corresponding event.
				finishRefresh();
			}
 

 

分享到:
评论

相关推荐

    Spring Bean创建初始化流程.docx

    1. **初始化ApplicationContext**: 开始时,通过`AnnotationConfigApplicationContext`类创建一个上下文实例,通常传入一个或多个配置类(`annotatedClasses`),这些类带有@Configuration注解,用于定义Bean的...

    springBean加载过程源码解析文档,附有代码类名和行数

    Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责加载和管理 Bean。 SpringApplication...

    Spring中Bean的生命周期 applicationcontext的应用(实现国际化,事件的传递)

    3. **初始化回调**:在属性注入完成后,Spring会调用Bean的初始化方法。如果在Bean定义中配置了`init-method`,那么这个方法会被执行。此外,实现`InitializingBean`接口的Bean也会自动调用`afterPropertiesSet()`...

    浅谈spring容器中bean的初始化

    在Spring框架中,Bean的初始化是一个关键的概念,它涉及到Bean的生命周期管理以及Spring容器如何创建、配置和管理这些Bean。本文将深入探讨Spring容器中Bean的初始化过程。 首先,Spring容器根据XML配置文件(如`...

    spring bean的生命周期测试代码

    4. **容器回调**:在Bean初始化之后,Spring容器可能会调用自己的回调方法,如`BeanPostProcessor`接口实现的`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,允许自定义逻辑进一步...

    Spring bean 管理

    Spring通过一系列的回调方法来管理Bean的生命周期,包括初始化和销毁时的操作。 - 通过&lt;bean&gt;标签的init-method和destroy-method属性指定初始化和销毁方法。 - 容器在创建Bean实例时调用初始化方法,在销毁Bean...

    tiny-spring-step-6-invite-application-context.zip

    它可以初始化和管理所有的Bean,处理依赖注入,提供事务管理,以及与其它Spring模块(如数据访问、Web应用等)的集成。 五、小结 Spring的IoC容器,尤其是ApplicationContext,极大地简化了Java应用的开发和管理。...

    简单Spring框架模拟器--Demo

    “tiny-spring-step-3-inject-bean-with-property.zip”带你走进依赖注入的世界。这个步骤通过属性注入,展示了如何将一个Bean的属性与其他Bean关联,实现对象间的松耦合,这是Spring框架的一大亮点。 “tiny-...

    spring-framework-4-reference

    核心容器的改进,如增加了新的注解,改进了bean的初始化和销毁过程。常规Web应用也得到了增强,比如对WebSocket, SockJS和STOMP消息的增强支持。 Spring Framework 4.1中重点对WebSocket STOMP消息进行了改进。 ...

    spring-developing-java-applications-enterprise

    5. **运行程序**:通过配置好的Spring容器来启动程序,Spring会自动管理和初始化bean。 #### 六、控制反转(IoC) - **理解控制反转**:在传统的编程方式中,对象之间的依赖关系是由对象自己管理的。而在Spring中...

    spring3.0 + Quartz1.52 + applicationContext.xml

    2. **配置Scheduler**:在`applicationContext.xml`中,我们需要创建一个`SchedulerFactoryBean`,这是Spring对Quartz Scheduler的封装,它负责初始化和管理Scheduler实例。例如: ```xml &lt;bean id="scheduler" ...

    Spring获取ApplicationContext对象工具类的实现方法

    值得注意的是,在Web应用中,通常推荐使用ServletContextListener来初始化ApplicationContext,并将其存储在ServletContext中供整个应用使用。这样可以更加高效和方便地管理ApplicationContext的生命周期,并且能够...

    spring-context-4.2.xsd.zip

    Spring Context模块是Spring框架的核心部分,它提供了一个统一的接口来管理应用对象,包括bean的创建、初始化、配置和查找。Context模块使得应用程序可以跨越不同层次和组件,实现松耦合和高可测试性。在Spring中,...

    spring系列教程博客源码-东离与糖宝

    - **Bean容器**:Spring中的ApplicationContext,负责创建、管理和装配Bean,是DI的实现载体。 - **AOP**:用于处理系统中横切关注点,如日志、事务管理等,使得业务逻辑更专注于核心功能。 2. **Spring模块**: ...

    spring为ApplicationContext提供的3种实现分别为:ClassPathXmlApplicationContext

    1. **Bean的管理**:ApplicationContext 能够管理应用中的所有 Bean,负责它们的创建、初始化、依赖注入以及销毁等生命周期操作。 2. **资源的加载**:ApplicationContext 可以加载配置文件,不仅限于 XML 格式,还...

    spring-framework-2.5.6-20081023-647.zip

    5. **初始化容器**:通过ClassPathXmlApplicationContext或FileSystemXmlApplicationContext初始化Spring容器,加载配置文件并管理bean。 三、使用指南 1. **Bean的声明**:通过XML配置或注解定义Bean,例如: - ...

    Spring Bean 生命周期之“我从哪里来?”.docx

    此外,Spring还提供了`BeanPostProcessor`接口,它允许自定义在Bean初始化前后进行的额外处理。该接口包含两个方法:`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`,这两个方法会在Bean...

    Java中Spring获取bean方法小结

    在Web应用中,可以配置一个Servlet,在服务器启动时初始化ApplicationContext。在`web.xml`中定义Servlet,并在`init()`方法中加载ApplicationContext。这有助于确保在应用启动时完成所有必要的初始化工作。 ```...

    【java框架】Spring(3) -- Spring配置补充(基于Maven项目)(csdn)————程序.pdf

    - **@PostConstruct 和 @PreDestroy 注解**:分别用于标记在 Bean 初始化后和销毁前需要执行的方法,帮助管理 Bean 的生命周期。 在基于 Maven 的项目中,Spring 配置文件通常放在 `src/main/resources` 目录下,...

    Spring 源码分析(Bean的初始化)

    总结起来,Spring的Bean初始化是一个复杂而精细的过程,涉及XML解析、BeanDefinition的构建、依赖注入、初始化回调、AOP代理等多个环节。通过深入理解这一过程,开发者能更好地掌握Spring框架的工作原理,从而更高效...

Global site tag (gtag.js) - Google Analytics