单例池
- 单例Bean != Spring容器中只有一个该类型的Bean, 同一个类型的Bean可以通过命名不同的 id 来生成相同类型Bean
- 单例池 -> ConcurrentHashMap<String , Object> singletonObject -> 用单例池来存放单例Bean
BeanFactory
- 顾名思义, BeanFactory就是Bean工厂, 用于生成Bean
- 可以注册一个BeanDefinition也可以注册一个对象
- 还可以销毁一个Bean, 判断某个Bean是否存在等等
ApplicationContext
- ApplicationContext 与 BeanFactory区别
- ApplicationContext接口包括了BeanFactory的功能, 在此基础上还有其他的功能拓展, 比如获取环境变量, 国际化, 事件发布, 资源解析等
- Spring配置的展现形式
-
注解形式
- AnnotationConfigApplicationContext
- AnnotationConfigApplicationContext
-
XML形式
-
ClasspathXmlApplicationContext
-
FileSystemXmlApplicationContext
-
两者区别:
- ClasspathXmlApplicationContext会将classpath作为起始路径, FileSystemXmlApplicationContext将项目根目录作为起始路径, 且两者都支持绝对路径
-
-
- 是否可刷新
-
可刷新: ClasspathXmlApplicationContext
- 刷新会将当前容器中的bean对象全部销毁, 再重新加载配置文件对容器进行初始化, 生成bean对象, 如果在刷新过程中配置文件发生改变, 改变的部分也会生效
- 刷新前后得到的不是同一个对象
-
不可刷新: AnnotationConfigApplicationContext
-