【理解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 要保证每个事务强隔离,所以对每个事务强行串...
理解事务隔离级别
事务的隔离性实际上比想象的要复杂,在 SQL 标准中定义了四种隔离级别
Read Uncommitted/未提交读
在此级别中,即使事务中的修改未提交,也会被其他事务“看见”,这被称为“脏读”,这会导致很多问题。
Read Commited/读已提交
在此级别中,解决了脏读的问题,满足了隔离性的简单定义:事务内的修改只有在提交才能被其他事务后“看见”,换句话说,一个事务从开始到提交,其中所作的所有修改对其他事务都是不可见的。
但是这个隔离级别也有缺陷:事务A读取一条数据,事务B修改了这条数据并提交,当事务A再次读取该数据,得到的结果和上一次不同,所以这个隔离级别也叫:不可重复读(nonrepeatable read)
Repeatable Read/可重复读
在此...
共计 47 篇文章,6 页。