本节讲 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(); }
相关推荐
1. **初始化ApplicationContext**: 开始时,通过`AnnotationConfigApplicationContext`类创建一个上下文实例,通常传入一个或多个配置类(`annotatedClasses`),这些类带有@Configuration注解,用于定义Bean的...
Spring Bean 加载过程是 Spring 框架中最核心的部分之一,涉及到 ApplicationContext 的初始化、Bean 的加载和注册等过程。在 Spring Boot 应用程序中,SpringApplication 负责加载和管理 Bean。 SpringApplication...
3. **初始化回调**:在属性注入完成后,Spring会调用Bean的初始化方法。如果在Bean定义中配置了`init-method`,那么这个方法会被执行。此外,实现`InitializingBean`接口的Bean也会自动调用`afterPropertiesSet()`...
在Spring框架中,Bean的初始化是一个关键的概念,它涉及到Bean的生命周期管理以及Spring容器如何创建、配置和管理这些Bean。本文将深入探讨Spring容器中Bean的初始化过程。 首先,Spring容器根据XML配置文件(如`...
4. **容器回调**:在Bean初始化之后,Spring容器可能会调用自己的回调方法,如`BeanPostProcessor`接口实现的`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`方法,允许自定义逻辑进一步...
Spring通过一系列的回调方法来管理Bean的生命周期,包括初始化和销毁时的操作。 - 通过<bean>标签的init-method和destroy-method属性指定初始化和销毁方法。 - 容器在创建Bean实例时调用初始化方法,在销毁Bean...
它可以初始化和管理所有的Bean,处理依赖注入,提供事务管理,以及与其它Spring模块(如数据访问、Web应用等)的集成。 五、小结 Spring的IoC容器,尤其是ApplicationContext,极大地简化了Java应用的开发和管理。...
“tiny-spring-step-3-inject-bean-with-property.zip”带你走进依赖注入的世界。这个步骤通过属性注入,展示了如何将一个Bean的属性与其他Bean关联,实现对象间的松耦合,这是Spring框架的一大亮点。 “tiny-...
核心容器的改进,如增加了新的注解,改进了bean的初始化和销毁过程。常规Web应用也得到了增强,比如对WebSocket, SockJS和STOMP消息的增强支持。 Spring Framework 4.1中重点对WebSocket STOMP消息进行了改进。 ...
5. **运行程序**:通过配置好的Spring容器来启动程序,Spring会自动管理和初始化bean。 #### 六、控制反转(IoC) - **理解控制反转**:在传统的编程方式中,对象之间的依赖关系是由对象自己管理的。而在Spring中...
2. **配置Scheduler**:在`applicationContext.xml`中,我们需要创建一个`SchedulerFactoryBean`,这是Spring对Quartz Scheduler的封装,它负责初始化和管理Scheduler实例。例如: ```xml <bean id="scheduler" ...
值得注意的是,在Web应用中,通常推荐使用ServletContextListener来初始化ApplicationContext,并将其存储在ServletContext中供整个应用使用。这样可以更加高效和方便地管理ApplicationContext的生命周期,并且能够...
Spring Context模块是Spring框架的核心部分,它提供了一个统一的接口来管理应用对象,包括bean的创建、初始化、配置和查找。Context模块使得应用程序可以跨越不同层次和组件,实现松耦合和高可测试性。在Spring中,...
- **Bean容器**:Spring中的ApplicationContext,负责创建、管理和装配Bean,是DI的实现载体。 - **AOP**:用于处理系统中横切关注点,如日志、事务管理等,使得业务逻辑更专注于核心功能。 2. **Spring模块**: ...
1. **Bean的管理**:ApplicationContext 能够管理应用中的所有 Bean,负责它们的创建、初始化、依赖注入以及销毁等生命周期操作。 2. **资源的加载**:ApplicationContext 可以加载配置文件,不仅限于 XML 格式,还...
5. **初始化容器**:通过ClassPathXmlApplicationContext或FileSystemXmlApplicationContext初始化Spring容器,加载配置文件并管理bean。 三、使用指南 1. **Bean的声明**:通过XML配置或注解定义Bean,例如: - ...
此外,Spring还提供了`BeanPostProcessor`接口,它允许自定义在Bean初始化前后进行的额外处理。该接口包含两个方法:`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`,这两个方法会在Bean...
在Web应用中,可以配置一个Servlet,在服务器启动时初始化ApplicationContext。在`web.xml`中定义Servlet,并在`init()`方法中加载ApplicationContext。这有助于确保在应用启动时完成所有必要的初始化工作。 ```...
- **@PostConstruct 和 @PreDestroy 注解**:分别用于标记在 Bean 初始化后和销毁前需要执行的方法,帮助管理 Bean 的生命周期。 在基于 Maven 的项目中,Spring 配置文件通常放在 `src/main/resources` 目录下,...
总结起来,Spring的Bean初始化是一个复杂而精细的过程,涉及XML解析、BeanDefinition的构建、依赖注入、初始化回调、AOP代理等多个环节。通过深入理解这一过程,开发者能更好地掌握Spring框架的工作原理,从而更高效...