JPA(一)-基础理论
参考文献
拉钩教育–Spring Data JPA原理与实战
基本使用
ORM框架对比
Spring Data Common的依赖关系
数据库连接用的是JDBC
连接池用的是HikariCP
强依赖Hibernate
Spring Boot Starter Data JPA 依赖Spring Data JPA 而Spring Data JPA依赖Spring Data Commons
Repository接口
Repository是Spring Date Common里面的顶级父类接口,操作DB的入口类.
Repository类层次关系
ReactiveCrudRepository 这条线是响应式编程,主要支持当前 NoSQL 方面的操作,因为这方面大部分操作都是分布式的,所以由此我们可以看出 Spring Data 想统一数据操作的“野心”,即想提供关于所有 Data 方面的操作。目前 Reactive 主要有 Cassandra、MongoDB、Redis 的实现。
RxJava2CrudRepository 这条线是为了支持 ...
Spring-Transaction事务
参考文献
Spring 事务失效的 8 大场景,看看都遇到过几个?
Spring官方推荐的@Transactional还能导致生产事故?原来姿势完全错了
当Transactional碰到锁,有个大坑,要小心.
几行烂代码,我赔了16万。
Spring事务隔离级别
Spring提供事5种务隔离级别
@Transaction(isolation=Isolation.DEFAULT): 默认的事务隔离级别,即使用数据库的事务隔离级别.
@Transaction(isolation=Isolation.READ_UNCOMMITTED): 读未提交,这是最低的事务隔离级别,允许其他事务读取未提交的数据,这种级别的事务隔离会产生脏读,不可重复读和幻读.
@Transaction(isolation=Isolation.READ_COMMITTED): 读已提交,这种级别的事务隔离能读取其他事务已修改的数据,不能读取未提交的数据,会产生不可重复读和幻读.
@Transaction(isolation=Isolation.REPEATABLE_READ): 可重复读,这种级别的事务隔离可以防 ...
SpringBoot-整合SpringBoot Security
参考文献
Spring Boot: 整合Spring Security
SpringSecurity登录原理(源码级讲解)
Sping Security前后端分离两种方案
spring security 在controller层 方法级别使用注解 @PreAuthorize(“hasRole(‘ROLE_xxx’)”)设置权限拦截 ,无权限则返回403
Spring-Security基于源码扩展-自定义登录(二十三)
基于SpringBoot2.2.2.RELEASE
依赖
1234// springboot_version= '2.2.2.RELEASE'implementation "org.springframework.boot:spring-boot-starter:$springboot_version"implementation "org.springframework.boot:spring-boot-starter-web:$springboot_version"implementation " ...
SpringBoot-注解@NestedConfigurationProperty
参考文献
示例
依赖
1implementation 'org.springframework.boot:spring-boot-configuration-processor:2.2.2.RELEASE'
JavaConfig:
12345678910111213141516import com.holelin.config.oss.AliYunConfigimport com.holelin.config.oss.MinioConfigimport org.springframework.boot.context.properties.ConfigurationPropertiesimport org.springframework.boot.context.properties.NestedConfigurationPropertyimport org.springframework.stereotype.Component@Component@ConfigurationProperties(prefix = "oss")open ...
SpringMVC-基础
参考文献
【对线面试官】SpringMVC
手码两万余字,SpringMVC 包教包会
SpringMVC中的组件
DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于MVC模式中的C,DispatcherServlet 是整个流程控制的中心,相当于是 SpringMVC 的大脑,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器
HandlerMapping 负责根据用户请求找到 Handler 即处理器(也就是我们所说的 Controller),SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等,在实际开发中,我们常用的方式是注解方式。
Handler:处理器
Handler 是继 DispatcherServlet 前端控制器的后端控制器,在DispatcherServlet 的控制下 Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况需 ...
Spring-循环依赖
参考文献
spring:我是如何解决循环依赖的?
循环依赖
一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了构成一个环形调用;
自己依赖自己的直接依赖;
两个对象之间的直接依赖;
多个对象之间的间接依赖;
Spring如何检测循环依赖
创建单例Bean时,会调用下面的方法
1234567891011121314151617// org.springframework.beans.factory.support.AbstractBeanFactory#doGetBean ==>// org.springframework.beans.factory.support.DefaultSingletonBeanRegistry#getSingleton(java.lang.String, org.springframework.beans.factory.ObjectFactory<?>) ==>// org.springframework.beans.factory.support.DefaultSingletonB ...
Spring(十九)-ApplicationContext Lifecycle应用上下文生命周期
参考文献
Spring应用上下文准备阶段
org.springframework.context.ConfigurableApplicationContext#refresh
org.springframework.context.support.AbstractApplicationContext#prepareRefresh方法
启动时间: startupDate
状态标识: closed(false),active(true)
初始化:PropertySources initPropertySources()
校验Environment中必须属性
初始化事件监听器集合
初始化早期Spring事件集合
BeanFactory 创建阶段
org.springframework.context.support.AbstractApplicationContext#obtainFreshBeanFactory方法
刷新Spring应用上下文底层BeanFactory : refreshBeanFactory()
销毁或关闭BeanFactory: 如果已存在的话
...
Spring(十八)-Environment Abstraction
参考文献
理解Spring Environment抽象
统一的Spring配置属性管理
Spring Framework 3.1开始引入Environment抽象,它统一Spring配置属性的存储,包括占位符处理和类型转换,不仅完整地替换PropertyPlaceholderConfigurer,而且还支持更丰富的配置属性源PropertySource;
条件化Spring Bean装配管理
通过Environment Porfiles信息,帮助Spring容器提供条件化地装配Bean;
Spring Environment接口使用场景
用于属性占位符处理
用于转换Spring配置属性类型
用于存储Spring配置属性源(PropertySource)
用于Profiles状态的维护
Environment占位符处理
Spring 3.1前占位符处理
组件: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer
接口: org.springframework.util.Str ...
Spring(十七)-Annotations注解
参数文献
SpringBoot编程思想
Spring Annotation Programming Model
Spring注解驱动编程发展历程
注解驱动启蒙时代: Spring Framerwork 1.x
注解驱动过渡时代: Spring Framerwork 2.x
注解驱动黄金时代: Spring Framerwork 3.x
注解驱动完善时代: Spring Framerwork 4.x
注解驱动当下时代: Spring Framerwork 5.x
Spring核心注解场景分类
Spring模式注解
Spring注解
场景说明
起始版本
@Repository
数据仓储模式注解
2.0
@Component
通用组件模式注解
2.5
@Service
服务模式注解
2.5
@Controller
Web控制器模式注解
2.5
@Configuration
配置类模式注解
3.0
装配注解
Spring注解
场景说明
起始版本
@ImportResource
替换XML元素<import>
2.5
...
Spring(十六)-Events事件
参考文献
Java事件/监听器编程模型
设计模式-观察模式扩展
可观者对象(消息发送者): java.util.Observable
观察者: java.util.Observer
标准化接口
事件对象: java.util.EventObject
事件监听器: java.util.EventListener
事件模式中的几个概念
事件源: 事件的触发者.
事件: 描述发生了什么事情的对象.
事件监听器: 监听到事件发生的时候,做一些处理.
硬编码方式实现Spring事件
定义事件
自定义事件,需要继承ApplicationEvent类
定义监听器
自定义事件监听器,需要实现ApplicationListener接口,这个接口有个方法onApplicationEvent需要实现,用来处理感兴趣的事件.
创建事件广播器
创建事件广播器ApplicationEventMulticaster,这是个接口,可以自己实现这个接口,也可以直接使用系统提供的SimpleApplicationEventMulticaster
向广播器中注册事件监听器 ...