接下来的几篇文章会带着大家去看看spring的源码,我们会从两大部分去阅读spring的源码,主要是ioc和aop这两块。在阅读源码之前,我们先来看看spring的一些继承体系和一些容易造成混淆的接口。
复制代码
Spring的继承体系
spring基础容器(BeanFactory)的继承体系
这里面我们对几个比较重要的接口做下说明
- BeanFactory:IOC容器最顶层的接口,对IOC容器的基本行为做了定义,很明显这就是工厂模式的工厂接口
- ListableBeanFactory:主要是用来定义返回一系列bean的接口,比如,返回指定类型的bean的所有实例,也可以获取所有的beanName。
- ConfigurableBeanFactory:设置bean加载的一系列信息
- AutowireCapableBeanFactory:自动装配的bean工厂,它提供了自动装配的功能,根据类定义BeanDefinition装配Bean、同时执行前置和后置处理器。
- DefaultListableBeanFactory:基础容器的集大成者,它包括了上面所有父类或者父接口的方法,同时继承了BeanDefinitionRegistry,也拥有了对BeanDefinition操作的能力。
spring高级容器(ApplicationContext)的继承体系
可以看到高级容器不仅具体基础容器BeanFactory的功能还额外了许多其他的功能。
- ClassPathXmlApplicationContext:主要是通过xml加载Bean的入口
- AnnotationConfigApplicationContext:主要是加载通过注解配置的Bean
看了两个继承体系之后,我们先来聊一聊两个继承体系的一不同之处:
- ApplicationContext接口是继承于BeanFactory接口
- BeanFactory创建是在第一次getBean()的时候创建bean实例
- ApplicationContext是在初始化的时候就把所有的单例Bean创建完成
同时还有几个接口需要我们知道他们的区别,BeanPostProcessor和BeanFactoryPostProcessor,BeanFactory和FactoryBean 这两对接口名称很相似的接口的区别我们需要清楚,否则后面看源码会有的蒙,而且面试也有可能会提及。
BeanPostProcessor和BeanFactoryPostProcessor的区别
- BeanFactoryPostProcessor:在bean实例创建之前,对BeanDefinition进行前置和后置处理(BeanDefinition是存储需要被加载的bean的一些信息,包括类型,名称,是否单例等信息)
- BeanPostProcessor:在创建bean实例前后,对bean对象进行处理。一些代理类就是通过BeanPostProcessor进行创建的。
下面我们了解下BeanFactory和FactoryBean的一些区别
- BeanFactory:就是ioc的基础容器,管理着spring中所有的bean
- FactoryBean:也是spring管理的备案,只是这个bean比较特殊,就是一些工厂bean用来是用来产生bean对象的bean。比如我们在mybatis中定义的Mapper接口就是通过,MapperFactoryBean产生对应的代理对象。
结语
今天我们带大家了解了springIoc容器的基础体系和了解一些容易混淆的感念,下一篇我们会开始带大家进入spring的源码中去看看整个bean的加载到创建完毕的一个过程。复制代码
原文
https://juejin.im/post/5dc79426e51d454afb467b2e