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 ...
Spring(三) BeanDefinition
Spring BeanDefinition
BeanDefinition是SpringFramework中定义Bean的配置元信息接口,包含:
Bean的类名;
Bean行为配置元素,如作用域,自动绑定模式,生命周期回调等;
其他Bean引用,又可称为合作者(collaborators)或者依赖(dependencies);
配置设置,比如Bean属性(Properties);
BeanDefinition元信息
属性(Property)
说明
Class
Bean全类名,必须是具体类,不能用抽象类或接口
Name
Bean的名称或ID
Scope
Bean的作用域(如,Singleton,Prototype等)
Constructor arguments
Bean构造器参数(用于依赖注入)
Properties
Bean属性设置(用于依赖注入)
Autowiring mode
Bean自动绑定模式(如:通过名称byName)
Lazy initialization mode
Bean延迟初始化模式(延迟和非延迟)
Initializ ...