2023年1月12日小于 1 分钟
- Java75
- 框架75
- Spring75
- java62
- Spring核心24
- Spring综合20
- Spring数据10
- mysql9
- SpringWeb8
- dependence5
- SpringIO4
- Spring集成4
- Spring其他4
- redis3
- linux2
- windows2
- 使用指南1
- idea1
- network1
- spring1
- python1
- Spring安全1
Spring 应用上下文启动准备阶段
AbstractApplicationContext#prepareRefresh() 方法
- 启动时间 - startupDate
- 状态标识 - closed(false)、active(true)
- 初始化 PropertySources - initPropertySources()
- 检验 Environment 中必须属性
- 初始化事件监听器集合
- 初始化早期 Spring 事件集合
BeanFactory 创建阶段
2022年12月23日大约 3 分钟
理解 Spring Environment 抽象
统一的 Spring 配置属性管理
Spring Framework 3.1 开始引入 Environment 抽象,它统一 Spring 配置属性的存储,包括占位符处理和类型转换,不仅完整地替换 PropertyPlaceholderConfigurer,而且还支持更丰富的配置属性源(PropertySource)
条件化 Spring Bean 装配管理
通过 Environment Profiles 信息,帮助 Spring 容器提供条件化地装配 Bean
Spring Environment 接口使用场景
2022年12月23日大约 2 分钟
Spring 注解驱动编程发展历程
- 注解驱动启蒙时代:Spring Framework 1.x
- 注解驱动过渡时代:Spring Framework 2.x
- 注解驱动黄金时代:Spring Framework 3.x
- 注解驱动完善时代:Spring Framework 4.x
- 注解驱动当下时代:Spring Framework 5.x
Spring 核心注解场景分类
Spring 模式注解
Spring 注解 | 场景说明 | 起始版本 |
---|---|---|
@Repository | 数据仓储模式注解 | 2.0 |
@Component | 通用组件模式注解 | 2.5 |
@Service | 服务模式注解 | 2.5 |
@Controller | Web 控制器模式注解 | 2.5 |
@Configuration | 配置类模式注解 | 3.0 |
2022年12月23日大约 2 分钟
Java 事件/监听器编程模型
设计模式 - 观察者模式扩展
- 可观者对象(消息发送者) - java.util.Observable
- 观察者 - java.util.Observer
标准化接口
- 事件对象 - java.util.EventObject
- 事件监听器 - java.util.EventListener
面向接口的事件/监听器设计模式
事件/监听器场景举例
Java 技术规范 | 事件接口 | 监听器接口 |
---|---|---|
JavaBeans | java.beans.PropertyChangeEvent | java.beans.PropertyChangeListener |
Java AWT | java.awt.event.MouseEvent | java.awt.event.MouseListener |
Java Swing | javax.swing.event.MenuEvent | javax.swing.event.MenuListener |
Java Preference | java.util.prefs.PreferenceChangeEvent | java.util.prefs.PreferenceChangeListener |
2022年12月22日大约 4 分钟
Java 泛型基础
泛型类型
- 泛型类型是在类型上参数化的泛型类或接口
泛型使用场景
- 编译时强类型检查
- 避免类型强转
- 实现通用算法
泛型类型擦写
- 泛型被引入到 Java 语言中,以便在编译时提供更严格的类型检查并支持泛型编程。类型擦除确保不会
为参数化类型创建新类;因此,泛型不会产生运行时开销。为了实现泛型,编译器将类型擦除应用于:- 将泛型类型中的所有类型参数替换为其边界,如果类型参数是无边界的,则将其替换为
“Object”。因此,生成的字节码只包含普通类、接口和方法 - 必要时插入类型转换以保持类型安全
- 生成桥方法以保留扩展泛型类型中的多态性
- 将泛型类型中的所有类型参数替换为其边界,如果类型参数是无边界的,则将其替换为
2022年12月22日大约 3 分钟
Spring 类型转换的实现
- 基于 JavaBeans 接口的类型转换实现
- 基于 java.beans.PropertyEditor 接口扩展
- Spring 3.0+ 通用类型转换实现
使用场景
场景 | 基于 JavaBeans 接口的类型转换实现 | Spring 3.0+ 通用类型转换实现 |
---|---|---|
数据绑定 | YES | YES |
BeanWrapper | YES | YES |
Bean 属性类型转换 | YES | YES |
外部化属性类型转换 | NO | YES |
2022年12月22日大约 3 分钟
Spring 数据绑定(Data Binding)的作用是将用户的输入动态绑定到 JavaBean。换句话说,Spring 数据绑定机制是将属性值设置到目标对象中。
在 Spring 中,数据绑定功能主要由 DataBinder
类实现。此外,BeanWrapper
也具有类似的功能,但 DataBinder
额外支持字段验证、字段格式化和绑定结果分析。
2022年12月22日大约 3 分钟
Java API 规范(JSR303
)定义了Bean
校验的标准validation-api
,但没有提供实现。hibernate validation
是对这个规范的实现,并增加了校验注解如@Email
、@Length
等。Spring Validation
是对hibernate validation
的二次封装,用于支持spring mvc
参数自动校验。
2022年12月22日大约 9 分钟
Spring 国际化使用场景
- 普通国际化文案
- Bean Validation 校验国际化文案
- Web 站点页面渲染
- Web MVC 错误消息提示
Spring 国际化接口
- 核心接口:
org.springframework.context.MessageSource
- 主要概念
- 文案模板编码(code)
- 文案模板参数(args)
- 区域(Locale)
2022年12月22日大约 2 分钟