【理解Spring】Spring启动
概览
通常所说的 Spring 启动,就是构造 ApplicationContext 对象以及调用 refresh() 方法的过程,其中最核心的内容是 调用BeanFactoryPostProcessors 和 解析配置类。
Spring 启动过程主要执行了:
构造一个 BeanFactory 对象
解析配置类,得到 BeanDefinition,并注册到 BeanFactory 中
解析 @ComponentScan,并完成扫描
解析 @Import
解析 @Bean
…
初始化 MessageSource 对象(ApplicationContext 支持国际化)
初始化 Applicati...
【理解Spring】FactoryBean
代码示例:
@Component
public class CustomerFactoryBean implements FactoryBean {
@Override
public Object getObject() throws Exception {
return new UserService();
}
@Override
public Class<?> getObjectType() {
return UserService.class;
}
}
自定义 FactoryBean 可以控制 Bean 的创建。
在 Spring 的启动流程中, 会把 Cust...
【理解Spring】BeanPostProcessor
BeanPostProcess表示 Bean 的后置处理器
一个BeanPostProcessor可以在任意一个 Bean 的初始化之前以及初始化之后去额外的做一些用户自定义的逻辑
当然,也可以通过判断 beanName 来进行针对性处理(针对某个Bean,或某部分Bean)
可以通过定义BeanPostProcessor来干涉 Spring 创建 Bean 的过程
可以定义一个或多个 BeanPostProcessor,例如:
@Component
public class CustomerBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBefor...
【理解Spring】ApplicationContext
在 Spring 中 ApplicationContext 继承了 ListableBeanFactory 和 HierarchicalBeanFactory,而 ListableBeanFactory 和 HierarchicalBeanFactory 都继承至 BeanFactory, 所以可以认为 ApplicationContext 继承了 BeanFactory
public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory,
MessageSource, ApplicationEventPublisher,...
【理解Spring】BeanFactory
BeanFactory 顾名思义负责创建 Bean,并且提供了获取 Bean 的 API。
DefaultListableBeanFactory
DefaultListableBeanFactory 继承 BeanFactory,同时支持很多其他功能,DefaultListableBeanFactory 在 Spring 中发挥非常重要的作用。
DefaultListableBeanFactory的类继承实现结构:
DefaultListableBeanFactory 实现了很多接口,也即拥有很多功能:
AliasRegistry :支持别名功能,一个名字可以对应多个别名
BeanDefinitionRegistry :可以注册、保存、移除、获取某个 BeanDefi...
【理解Spring】BeanDefinitionReader
Spring 提供的 BeanDefinition 读取器(BeanDefinitionReader),在使用 Spring 开发时用得少,但在 Spring 源码中很常见,相当于 Spring 基础设施
AnnotatedBeanDefinitionReader
可以直接把某个类转换为 BeanDefinition,并且会解析该类上的注解,比如
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
AnnotatedBeanDefinitionReader annotatedBeanDefinitionReader = new An...
【理解Spring】BeanDefinition
A BeanDefinition describes a bean instance, which has property values, constructor argument values, and further information supplied by concrete implementations.
BeanDefinition,表示 Bean 定义。
BeanDefinition 用于保存 Bean 的相关信息,包括
Class,表示 Bean 类型
Scope,表示 Bean 作用域,单例(Singleton)或原型(Prototype)等
LazyInit:表示 Bean 是否是懒加载
InitMethodName:表示 Bean 初始...
理解 InnoDB MVCC 机制
MVCC,全称 Multi-Version Concurrency Control,即多版本并发控制。
多版本并发控制(Multi-version Concurrency Control): 指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行,这样大幅度提高了InnoDB的并发度。
MVCC在 Read Committed 和 Repeatable Read两个隔离级别下工作。
要理解数据库的 MVCC 需要先了解数据库的事务隔离级别。
其中 Read Uncommitted 几乎没有隔离性,所以无需做任何处理;
Serializable 要保证每个事务强隔离,所以对每个事务强行串...
共计 48 篇文章,6 页。