IoC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IoC 思想。
BeanFactory和ApplicationContext都是Spring框架中的IOC容器
ApplicationContext是BeanFactory的子接口
接口图
BeanFactory和ApplicationContext的不同点
ApplicationContext接口继承更多接口,功能更强大
- 继承MessageSource,因此支持国际化。
- 继承ResourceLoader,统一的资源文件访问方式。
- 继承ApplicationEventPublisher,支持发布应用上下文
- 提供在监听器中注册bean的事件。
- 同时加载多个配置文件。
装载bean的方式不同
- BeanFactory:延迟实例化,在启动IOC容器时不会实例化Bean,只有在使用到某个Bean时(调用getBean方法获取实例化对象时),才对该Bean进行加载实例化,类似单例模式的懒汉模式
- ApplicationContext:在启动IOC容器时会预先实例化单例Bean,通过设置bean的属性lazy-init=true来让Bean延迟实例化,类似单例模式的饿汉模式
注册后置处理器的方式不同
BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。
注:BeanPostProcessor、BeanFactoryPostProcessor为后置处理器。
后置处理器作用是在Bean对象在实例化和依赖注入完毕后,在显示调用初始化方法的前后添加我们自己的逻辑。