Spring 泛型处理
Spring 泛型处理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 泛型参数类型 java.l...
Spring 类型转换
Spring 类型转换Spring 类型转换的实现 基于 JavaBeans 接口的类型转换实现 基于 java.beans.PropertyEditor 接口扩展 Spring 3.0+ 通用类型转换实现 使用场景 场景 基于 JavaBeans 接口的类型转换实现 Spring 3.0+ 通用类型转换实现 数据绑定 YES YES BeanWrapper YES YES Bean 属性类型转换 YES YES 外部化属性类型转换 NO YES 基于 JavaBeans 接口的类型转换核心职责 将 String 类型的内容转化为目标类型的对象 扩展原理 Spring 框架将文本内容传递到 PropertyEditor 实现的 setAsText(String) 方法 PropertyEditor#setAsText(String) 方法实现将 String 类型转化为目标类型的对象 将目标类型的对象传入 PropertyEditor#setValue(Object) 方法 PropertyEditor#setValue(Object) 方法...
Spring 数据绑定
Spring 数据绑定Spring 数据绑定(Data Binding)的作用是将用户的输入动态绑定到 JavaBean。换句话说,Spring 数据绑定机制是将属性值设置到目标对象中。 在 Spring 中,数据绑定功能主要由 DataBinder 类实现。此外,BeanWrapper 也具有类似的功能,但 DataBinder 额外支持字段验证、字段格式化和绑定结果分析。 快速入门定义一个用于测试的 JavaBean 123456789101112131415161718public class TestBean { private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; } @Override public String toString() { return "TestBean&...
Spring 校验
Spring 校验Java API 规范(JSR303)定义了Bean校验的标准validation-api,但没有提供实现。hibernate validation是对这个规范的实现,并增加了校验注解如@Email、@Length等。Spring Validation是对hibernate validation的二次封装,用于支持spring mvc参数自动校验。 快速入门引入依赖如果 spring-boot 版本小于 2.3.x,spring-boot-starter-web 会自动传入 hibernate-validator 依赖。如果 spring-boot 版本大于 2.3.x,则需要手动引入依赖: 12345<dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator-parent</artifactId> <version>6.2.5.Final</version>...
Spring 国际化
Spring 国际化Spring 国际化使用场景 普通国际化文案 Bean Validation 校验国际化文案 Web 站点页面渲染 Web MVC 错误消息提示 Spring 国际化接口 核心接口:org.springframework.context.MessageSource 主要概念 文案模板编码(code) 文案模板参数(args) 区域(Locale) 层次性 MessageSource Spring 层次性接口回顾 org.springframework.beans.factory.HierarchicalBeanFactory org.springframework.context.ApplicationContext org.springframework.beans.factory.config.BeanDefinition Spring 层次性国际化接口 org.springframework.context.HierarchicalMessageSource Java 国际化标准实现核心接口: 抽象实现 - java.util.Res...
Spring 配置元数据
Spring 配置元数据Spring 配置元信息 Spring Bean 配置元信息 - BeanDefinition Spring Bean 属性元信息 - PropertyValues Spring 容器配置元信息 Spring 外部化配置元信息 - PropertySource Spring Profile 元信息 - @Profile Spring Bean 配置元信息Bean 配置元信息 - BeanDefinition GenericBeanDefinition:通用型 BeanDefinition RootBeanDefinition:无 Parent 的 BeanDefinition 或者合并后 BeanDefinition AnnotatedBeanDefinition:注解标注的 BeanDefinition Spring Bean 属性元信息 Bean 属性元信息 - PropertyValues 可修改实现 - MutablePropertyValues 元素成员 - PropertyValue Bean 属性上下文存储 - AttributeA...
Spring Bean 生命周期
Spring Bean 生命周期Spring Bean 元信息配置阶段BeanDefinition 配置 面向资源 XML 配置 Properties 资源配置 面向注解 面向 API Spring Bean 元信息解析阶段 面向资源 BeanDefinition 解析 BeanDefinitionReader XML 解析器 - BeanDefinitionParser 面向注解 BeanDefinition 解析 AnnotatedBeanDefinitionReader Spring Bean 注册阶段BeanDefinition 注册接口:BeanDefinitionRegistry Spring BeanDefinition 合并阶段BeanDefinition 合并 父子 BeanDefinition 合并 当前 BeanFactory 查找 层次性 BeanFactory 查找 Spring Bean Class 加载阶段 ClassLoader 类加载 Java Security 安全控制 ConfigurableBeanFactory 临时...
Spring Bean 作用域
Spring Bean 作用域Spring Bean 作用域 来源 说明 singleton 默认 Spring Bean 作用域,一个 BeanFactory 有且仅有一个实例 prototype 原型作用域,每次依赖查找和依赖注入生成新 Bean 对象 request 将 Spring Bean 存储在 ServletRequest 上下文中 session 将 Spring Bean 存储在 HttpSession 中 application 将 Spring Bean 存储在 ServletContext 中 “singleton” Bean 作用域 “prototype” Bean 作用域Spring 容器没有办法管理 prototype Bean 的完整生命周期,也没有办法记录实例的存在。销毁回调方法将不会执行,可以利用 BeanPostProcessor 进行清扫工作。 “request” Bean 作用域 配置 XML - <bean class="..." scope = “request" /&...
Spring IoC 依赖来源
Spring IoC 依赖来源依赖查找的来源查找来源 来源 配置元数据 Spring BeanDefinition <bean id ="user" class="xxx.xxx.User"> @Bean public User user() {...} BeanDefinitionBuilder 单例对象 API 实现 Spring 內建 BeanDefintion Bean 名称 Bean 实例 使用场景 org.springframework.context.annotation.internalConfigurationAnnotationProcessor ConfigurationClassPostProcessor 对象 处理 Spring 配置类 org.springframework.context.annotation.internalAutowiredAnnotationProcessor AutowiredAnnotationBeanPo...
Spring 之事务
Spring 之事务Spring 针对 Java Transaction API (JTA)、JDBC、Hibernate 和 Java Persistence API(JPA) 等事务 API,实现了一致的编程模型,而 Spring 的声明式事务功能更是提供了极其方便的事务配置方式,配合 Spring Boot 的自动配置,大多数 Spring Boot 项目只需要在方法上标记 @Transactional 注解,即可一键开启方法的事务性配置。 理解事务在软件开发领域,全有或全无的操作被称为事务(transaction)。事务允许你将几个操作组合成一个要么全部发生要么全部不发生的工作单元。传统上 Java EE 开发对事务管理有两种选择:全局事务或本地事务,两者都有很大的局限性。 事务的特性事务应该具有 4 个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID。 原子性(Atomic):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(Consistent):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子...