1. IOC: 反转控制
在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资源,在这样的模式下开发人员往往需要知道在具体容器中特定资源的获取方式,增加了学习成本,同时降低了开发效率。
反转控制的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。
2. DI:依赖注入
IOC的另一种表述方式:即组件以一些预先定义好的方式(如:setter 方法)接受来自于容器的资源注入。相对于IOC而言,这种表述更直接。
总结: IOC 就是一种反转控制的思想, 而DI是对IOC的一种具体实现
3. IOC容器在Spring中的实现
在创建Bean之前,首先需要创建IOC容器。Spring提供了IOC容器的两种实现方式:
1)BeanFactory:IOC容器的基本实现,是Spring内部的使用接口,是面向Spring本身的,不是提供给开发人员使用的。
2)ApplicationContext:BeanFactory的子接口,提供了更多高级特性。面向Spring的使用者,几乎所有场合都使用ApplicationContext而不是底层的BeanFactory。
4.ApplicationContext的主要实现类
1)ClassPathXmlApplicationContext:对应类路径下的XML格式的配置文件
2)FileSystemXmlApplicationContext:对应文件系统中的XML格式的配置文件
>
3)ConfigurableApplicationContext:是ApplicationContext的子接口,包含一些扩展方法refresh()和close(),让ApplicationContext具有启动、关闭和刷新上下文的能力。
4)WebApplicationContext:专门为WEB应用而准备的,它允许从相对于WEB根目录的路径中完成初始化工作。
5. 获取bean的三种方式
- 根据bean的id获取(需要强转)
- 根据bean的类型获取(如果在IOC容器中有多个该类型的bean则会抛出异常)
- 根据bean的id和类型获取