IOC基础
- Inversion of controller 控制反转, 拥有对象创建的控制权与对象生命周期的管理权.
BeanFactory与ApplicationContext区别
- BeanFactory容器是顶层接口,定义一些基础功能与基础规范, 而ApplicationContext 容器是高级接口也是BeanFactory的子接口.
- ApplicationContext拥有更多的功能, 国际化、资源文件读取、类列表展示
Bean的作用范围与生命周期
- 作用范围与生命周期的关系, 作用范围决定了他的生命周期
作用范围
- singleton、property、request、session、application、websocket
- singleton(单例模式)与property(多例模式)使用较多; singleton生命周期为程序启动时到结束、property生命周期为当其使用时创建新对象.
高级特性
延迟加载
- ApplicationContext在实例化的时候也会将singleton objects 提前实例化. 提前实例化意味着作为初始化的一部分. 如果不想让某一singleton object 提前被实例化, 可以标识为懒加载(lazy)
- 开启延迟加载一定程度提高容器启动和运转性能
- 对于不常使用的 Bean 设置延迟加载,这样偶尔使用的时候再加载,不必要从一开始该 Bean 就占 用资源
FactoryBean与BeanFactory
- FactoryBean生成某种类的工具类. 而BeanFactory是容器的顶级接口
- spring中存在两种Bean, 普通Bean与FactoryBean
- FactoryBean可以生成某一个类型的Bean实例(返回给我们)
后置处理
- 两种后置处理Bean的接口, BeanFactoryPostProcessor和BeanPostProcessor
循环依赖
- 循环引用, 也就是两个或两个以上的Bean互相持有对方, 最终形成闭环.
- 构造器依赖与属性依赖; 构造器依赖是无法解决的, 只能抛出beanCurrentlyCreationException异常, 在解决这个循环依赖的问题时, spring采用的是提前暴露对象的方法. 通过三级缓存的方式.