Spring(十六)-Events事件
参考文献
Java事件/监听器编程模型
设计模式-观察模式扩展
可观者对象(消息发送者): java.util.Observable
观察者: java.util.Observer
标准化接口
事件对象: java.util.EventObject
事件监听器: java.util.EventListener
事件模式中的几个概念
事件源: 事件的触发者.
事件: 描述发生了什么事情的对象.
事件监听器: 监听到事件发生的时候,做一些处理.
硬编码方式实现Spring事件
定义事件
自定义事件,需要继承ApplicationEvent类
定义监听器
自定义事件监听器,需要实现ApplicationListener接口,这个接口有个方法onApplicationEvent需要实现,用来处理感兴趣的事件.
创建事件广播器
创建事件广播器ApplicationEventMulticaster,这是个接口,可以自己实现这个接口,也可以直接使用系统提供的SimpleApplicationEventMulticaster
向广播器中注册事件监听器 ...
Spring(十五)-GenericResolution泛型处理
参考文献
Java泛型基础
泛型类型
泛型类型是在类型上参数化的泛型类或接口
泛型使用场景
编译时强类型检查
避免类型强转
实现通用算法
泛型类型擦写
泛型被引入到 Java 语言中,以便在编译时提供更严格的类型检查并支持泛型编程。类型擦除确保不会为参数化类型创建新类;因此,泛型不会产生运行时开销。为了实现泛型,编译器将类型擦除应用于:
将泛型类型中的所有类型参数替换为其边界,如果类型参数是无边界的,则将其替换为“Object”。因此,生成的字节码只包含普通类、接口和方法。
必要时插入类型转换以保持类型安全。
生成桥方法以保留扩展泛型类型中的多态性。
Java 5 类型接口
Java 5 类型接口 - java.lang.reflect.Type
派生类或接口
说明
java.lang.Class
Java 类 API,如 java.lang.String
java.lang.reflect.GenericArrayType
泛型数组类型
java.lang.reflect.ParameterizedType
泛型参数类型 ...
Spring(十五)-TypeConversion数据转换
参考文献
Spring类型转换实现
基于 Java Beans 接口的类型转换实现
基于 java.beans.PropertyEditor 接口扩展
Spring 3.0+通用类型转换实现
使用场景
场景分析
场景
基于 Java Beans 接口的类型转换实现
Spring 3.0+ 通用类型转换实现
数据绑定
YES
YES
BeanWrapper
YES
YES
Bean 属性类型装换
YES
YES
外部化属性类型转换
NO
YES
基于 Java Beans 接口的类型转换
核心职责
将 String 类型的内容转化为目标类型的对象
扩展原理
Spring 框架将文本内容传递到 PropertyEditor 实现的 setAsText(String) 方法
PropertyEditor#setAsText(String) 方法实现将 String 类型转化为目标类型的对象
将目标类型的对象传入 PropertyEditor#setValue(Object) 方法
PropertyEditor#setValue(Ob ...
Spring(十三)-DataBanding数据绑定
参考文献
Spring数据绑定使用场景
Spring BeanDefinition到Bean实例创建
Spring数据绑定(DataBinder)
Spring Web参数绑定(WebDataBinder)
Spring 数据绑定组件
标准组件
org.springframework.validation.DataBinder
Web 组件
org.springframework.web.bind.WebDataBinder
org.springframework.web.bind.ServletRequestDataBinder
org.springframework.web.bind.support.WebRequestDataBinder
org.springframework.web.bind.support.WebExchangeDataBinder(@Since 5.0)
DataBinder 核心属性
属性
说明
target
关联目标 Bean
objectName
目标 Bean名称
bindingResu ...
Spring(十二)-Validation校验
参考文献
Spring Boot 实现各种参数校验,写得太好了,建议收藏!
Hibernate Validator 8.0.0.Final - Jakarta Bean Validation Reference Implementation: Reference Guide
Spring校验使用场景
Spring常规校验(Validator)
Spring数据绑定(DataBinder)
Spring Web参数绑定(WebDataBinder)
Spring Web MVC/Spring WebFlux处理方法参数校验
Validator接口设计
接口职责
Spring内部校验器接口,通过编程的方式校验目标对象
核心方法
support(Class): 校验目标类能否校验;
validate(Object,Errors): 校验目标对象,并将校验失败的内容输出至Errors对象
配套组件
错误收集器: org.springframework.validation.Errors
Validator 工具类:org.springframework.v ...
Spring(十一) 国际化
参考文献
Spring国际化使用场景
普通国际化文案
Bean Validation校验国际化文案
Web站点页面渲染
Web MVC错误消息提示
Spring国际化接口
核心接口: org.springframework.context.MessageSource
12345678910111213141516171819public interface MessageSource { /** * 获取国际化信息 * @param code 表示国际化资源中的属性名; * @param args用于传递格式化串占位符所用的运行期参数; * @param defaultMessage 当在资源找不到对应属性名时,返回defaultMessage参数所指定的默认信息; * @param locale 表示本地化对象 */ @Nullable String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale); /* ...
Spring(十) Resource资源管理
参考文献
Java标准资源管理
Java标准资源定位
职责
说明
面向资源
文件系统,artifact(jar,war,ear文件)以及远程资源(HTTP,FTP等)
API整合
java.lang.ClassLoader#getResource,java.io.File或java.net.URL
资源定位
java.net.URL或java.net.URI
面向流式存储
java.net.URLConnection
协议扩展
java.net.URLStreamHandler或java.net.URLStreamHandlerFactory
Java URL 协议扩展
基于java.net.URLStreamHandlerFactory
基于 java.net.URLStreamHandlerFactory 扩展协议
基于java.net.URLStreamHandler
JDK 1.8内建协议实现
协议
实现类
file
sun.net.www.protocol.file.Handler
ftp
sun. ...
Spring(九) ConfigurationMetadata配置元信息
Spring配置元信息
Spring Bean 配置元信息 - BeanDefinition
Spring Bean 属性元信息 - PropertyValues
Spring 容器配置元信息
Spring 外部化配置元信息 - PropertySource
Spring Profile 元信息 - @Profile
Spring Bean 配置元信息
GenericBeanDefinition:通用型 BeanDefinition
RootBeanDefinition:无 Parent 的 BeanDefinition 或者合并后 BeanDefinition
AnnotatedBeanDefinition:注解标注的 BeanDefinition
Spring Bean 属性元信息
可修改实现 - MutablePropertyValues
元素成员 - PropertyValue
Bean 属性上下文存储 - AttributeAccessor
Bean 元信息元素 - BeanMetadataElement
Spring 容器配置元信息
Spring ...
Spring(七) Bean作用域
参考文献
Bean Scopes
作用域
来源
说明
singleton
默认 Spring Bean 作用域,一个 BeanFactory 有且仅有一个实例
prototype
原型作用域,每次依赖查找和依赖注入生成新 Bean 对象
request
将 Spring Bean 存储在 ServletRequest 上下文中; Only valid in the context of a web-aware Spring ApplicationContext.
session
将 Spring Bean 存储在 HttpSession 中 ; Only valid in the context of a web-aware Spring ApplicationContext.
application
将 Spring Bean 存储在 ServletContext 中; Only valid in the context of a web-aware Spring ApplicationContext.
websocket
将 Spring Be ...
Spring(四) IoC依赖来源
依赖查找的来源
查找来源
来源
配置元信息
Spring BeanDefinition
<bean id=“user” class=“…User”>
@Bean public User user(){…}
BeanDefinitonBuilder
单例对象
API实现
Spring 内建BeanDefinition
Bean名称
Bean实例
使用场景
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
ConfigurationClassPostProcessor
处理Spring配置
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
AutowiredAnnotationBeanPostProcessor
处理@Autowired以及@Value
org.springframework.contex ...