主页

【理解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/可重复读 在此...

阅读更多