Spring-SpEL
参考文献
Spring Expression Language (SpEL)
SpEL表达式总结
Spring Expression Language (SpEL)
支持的功能
功能
说明
Literal expressions
字面量表达式
Boolean and relational operators
布尔和关系运算符
Regular expressions
正则表达式
Class expressions
类表达式
Accessing properties, arrays, lists, and maps
访问属性、数组、列表和映射
Method invocation
方法调用
Assignment
赋值
Calling constructors
调用构造函数
Bean references
Bean引用
Array construction
数组构建
Inline lists
内联列表
Inline maps
内嵌Map
Ternary operator
三元运算符
Variable ...
SpringBoot-扩展点
参考文献
SpringBoot—扩展接口
SpringBoot扩展点
ApplicationContextInitializer
BeanDefinitionRegistryPostProcessor
BeanFactoryPostProcessor
InstantiationAwareBeanPostProcessor
SmartInstantiationAwareBeanPostProcessor
BeanFactoryAware
ApplicationContextAwareProcessor
BeanNameAware
InitializingBean
FactoryBean
SmartInitializingSingleton
CommandLineRunner
DisposableBean
ApplicationListener
ApplicationContextInitializer
123456package org.springframework.context;@FunctionalInterfacepublic interface Application ...
SpringBoot-注解@Scheduled
参考文献
@Scheduled
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Repeatable(Schedules.class)public @interface Scheduled { String CRON_DISABLED = ScheduledTaskRegistrar.CRON_DISABLED; // 该参数接收一个cron表达式,cron表达式是一个字符串,字符串以5或6个空格隔开,分开共6或7个域,每一个域代表一个含义. /** * A cron-like expression, extending the usual UN*X definition to include trigger ...
Spring源码-阅读笔记
参考文献
Spring源码深度解析-郝佳
极客时间-Spring编程常见错误50例-傅健
环境说明
spring-framework 5.3x
Spring容器实现
DefaultListableBeanFactory
XmlBeanFeactory继承自DefaultListableBeanFactory,而DefaultListableBeanFactory是整个bean加载的核心部分,是Spring注册及加载bean的默认实现,而对于XmlBeanFeactory与DefaultListableBeanFactory不同的地方是在于XmlBeanFactory中使用了自定义的XML读取器XMLBeanDefinitionReader,实现了个性化的BeanDefinitionReader读取,DefaultListableBeanFactory继承了AbstractAutowireCapableBeanFactory并实现了ConfigurableListableBeanFactory以及BeanDefinitionRegistry接口.
类图中各个类的作用
...
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): 可重复读,这种级别的事务隔离可以防 ...
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
向广播器中注册事件监听器 ...