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 ...
Spring-扩展点
参考文献
聊聊 Spring 中最常用的 11 个扩展点
常用
自定义拦截器
Spring MVC拦截器的顶层接口是:HandlerInterceptor,包含三个方法:
preHandle 目标方法执行前执行
postHandle 目标方法执行后执行
afterCompletion 请求完成时执行
一般情况会用HandlerInterceptor接口的实现类HandlerInterceptorAdapter类。
SpringMVC-过滤器,拦截器,监听器
获取Spring容器对象
BeanFactoryAware接口
12345678910111213@Servicepublic class TestService implements BeanFactoryAware { private BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { ...
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
向广播器中注册事件监听器 ...
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
泛型参数类型 ...