一、概述
spring-core 是 Spring 框架的核心基础模块,为其他所有 Spring 模块提供基础设施支持。它包含了 Spring 框架最基础、最核心的功能组件。
二、核心功能模块
1. IoC 容器基础
-
BeanFactory:最基础的 IoC 容器接口
-
BeanDefinition:Bean 定义信息封装
-
AliasRegistry:别名注册管理
2. 资源访问
java
// 资源抽象
Resource - 资源统一接口
- ClassPathResource
- FileSystemResource
- UrlResource
- ByteArrayResource
// 资源加载器
ResourceLoader
ResourcePatternResolver
3. 类型转换系统
-
ConversionService:类型转换服务
-
Converter:转换器接口
-
GenericConverter:泛型转换器
-
PropertyEditor:属性编辑器支持
4. 核心工具类
对象操作
-
ObjectUtils:对象通用操作 -
Assert:断言工具 -
StringUtils:字符串处理(重点)
反射工具
-
ReflectionUtils:反射操作封装 -
MethodInvoker:方法调用器 -
ConstructorResolver:构造器解析
集合工具
-
CollectionUtils:集合操作 -
MultiValueMap:多值 Map
5. 异常体系
bash
NestedRuntimeException
├── BeansException
├── TypeMismatchException
└── ...
6. 基础注解
-
@Order:排序注解 -
@Priority:优先级注解
三、关键技术实现
1. ASM 字节码操作
-
用于读取类元数据而不加载类
-
实现
MetadataReader接口
2. CGLIB 动态代理
-
用于生成动态代理类
-
支持无接口类代理
3. Spring 表达式语言 (SpEL)
java
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello ' + name");
String result = exp.getValue(context, String.class);
四、使用示例
基础资源访问
java
// 读取类路径资源
Resource resource = new ClassPathResource("config.xml");
InputStream is = resource.getInputStream();
// 使用资源加载器
ResourceLoader loader = new DefaultResourceLoader();
Resource fileResource = loader.getResource("file:/data/config.xml");
类型转换
java
// 注册转换器
ConversionService conversionService = new DefaultConversionService();
conversionService.addConverter(new StringToDateConverter());
// 使用转换
String dateStr = "2024-01-01";
Date date = conversionService.convert(dateStr, Date.class);
五、依赖关系
bash
spring-core
├── spring-jcl (日志桥接)
└── 第三方依赖
├── asm (内嵌)
├── cglib (可选)
└── objenesis (可选)
六、与其他模块关系
bash
spring-core (基础)
↓
spring-beans (Bean 操作)
↓
spring-context (IoC 容器)
↓
spring-aop, spring-tx, spring-web...
七、核心优势
-
轻量级:最小化外部依赖
-
功能完整:提供丰富的基础设施
-
扩展性强:开放关键扩展点
-
性能优化:懒加载、缓存机制
八、最佳实践
-
合理使用工具类,避免重复造轮子
-
利用资源抽象,实现资源访问统一
-
使用类型转换系统,统一类型转换逻辑
-
理解异常层次,正确处理异常情况
spring-core 作为 Spring 的基石,理解和掌握它对深入学习 Spring 框架至关重要。