摘要:大家好,我是小米,一个热爱技术、喜欢分享的程序员大哥哥。今天我们聊聊Spring核心容器模块,尤其是Spring Context(应用上下文)。
嘿,大家好,我是小米,一个热爱技术、喜欢分享的程序员大哥哥。今天我们聊聊Spring核心容器模块,尤其是Spring Context(应用上下文)。
最近有个朋友去面试Java社招岗位,被问到:“详细讲解一下核心容器(Spring Context应用上下文)模块?”
他一下子懵了,回来跟我吐槽:“小米,这个Spring Context怎么讲啊?”
别急!今天我就把这个面试题拆开,手把手教你怎么拿下这道社招面试题!
首先,咱们搞清楚Spring核心容器模块。
Spring作为Java开发的大哥大,有五个核心模块:
Core:核心工具和基础模块Beans:对Java Bean的管理Context:应用上下文AOP:面向切面编程Expression Language (EL):表达式语言在这其中,Context模块是整个Spring框架的核心引擎,类似于一个巨型调度中心。
它的主要职责是什么呢?——管理和维护Bean的生命周期、依赖注入和资源调度。
1. 什么是Spring Context?
Context是Spring IoC容器的高级实现,在容器中负责创建、管理和销毁Bean。
Spring Context继承了BeanFactory,并在其基础上增加了更多特性,例如:
国际化(i18n)支持事件传播机制统一资源加载应用生命周期管理2. Context接口
Context接口的结构有点复杂,咱们用一张图来简化理解:
1、ClassPathXMLApplicationContext
从类路径下的XML配置文件中加载上下文适用于大多数基于XML配置的Spring应用代码示例:
2、FileSystemXmlApplicationContext
从文件系统中的XML文件加载路径可以是绝对路径或相对路径代码示例:
3、AnnotationConfigApplicationContext
基于注解配置的上下文常用于纯注解开发场景代码示例:
4、GenericApplicationContext
在面试中,如果能把生命周期讲清楚,直接加分!
实例化容器:创建一个ApplicationContext对象配置和加载Bean:从配置文件或注解中加载Bean定义预实例化单例Bean:单例模式的Bean会在容器启动时创建初始化容器:调用refresh方法完成初始化获取Bean:通过getBean方法获取Bean实例销毁容器:调用close方法,触发销毁回调重点:
1. Context和BeanFactory的区别?
2. ApplicationContext是如何管理Bean的?
依赖注入(DI):通过XML或注解注入生命周期管理:Bean的创建、初始化、销毁事件机制:例如ContextRefreshedEvent国际化:通过MessageSource支持多语言3. 为什么优先使用ApplicationContext而不是BeanFactory?
1、循环依赖问题
构造器注入会引起循环依赖,Spring无法处理解决方法:使用Setter注入或@Lazy注解2、上下文重复加载
面试的时候,别光背概念,要联系实际开发场景,比如:
来源:小钱科技每日一讲