JPA(二)-注解
参考文献
拉钩教育–Spring Data JPA原理与实战
@NonNull、@NonNullApi、@Nullable
从 Spring Data 2.0 开始,JPA 新增了@NonNull @NonNullApi @Nullable,是对 null 的参数和返回结果做的支持。
@NonNullApi:在包级别用于声明参数,以及返回值的默认行为是不接受或产生空值的。
12@org.springframework.lang.NonNullApipackage com.myrespository;
@NonNull:用于不能为空的参数或返回值(在 @NonNullApi 适用的参数和返回值上不需要)
@Nullable:用于可以为空的参数或返回值。
12345//当我们添加@Nullable 注解之后,参数和返回结果这个时候就都会允许为 null 了; @NullableUser findByEmailAddress(@Nullable EmailAddress emailAdress);//返回结果允许为 null,参数不允许为 null 的情 ...
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登录原理(源码级讲解)
Spring 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 &quo ...
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
...