Spring IOC
- 控制反转(Inversion of Control,IOC),是Spring的核心,用来消减计算机程序耦合问题。
- 依赖注入(Dependency Injection,DI)是IoC的另一种说法。
- 在使用Spring框架后,对象的实例化不再由调用者来创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是Spring的控制反转。
- 从Spring容器的角度来看,Spring容器负责将被依赖对象赋值给调用者的成员变量,这相当于为调用者注入了它的依赖的实例,这就是Spring的依赖注入。
- 综上,控制反转是一种通过描述并通过第三方去产生或获取特定对象的方式。在Spring中实现控制反转的容器是IoC,实现方法是依赖注入。
SpringIoC容器
BeanFactory和ApplicationContext
BeanFactory
BeanFactory由org.springframework.beans.factory.BeanFactory接口定义。常用实现类:org.springframework.beans.factory.xml.XmlBeanFactory
BeanFactory beanFact = new XmlBeanFactory(new FileSystemResource("D:\xxx\applicationContext.xml"));
ApplicationContext
ApplicationContext是BeanFactory的子接口,也称为应用上下文,由org.spring.framework.context.Application接口定义。且它除了包含BeanFactory的所有功能外还包含了支持国际化、资源访问、事件传播的支持。
通过ClassPathXmlApplicationContext创建
ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
通过FileSystemXmlApplicationContext创建
ApplicationContext appCon = new FileSystemXmlApplicationContext("绝对路径");
通过Web服务器实例化ApplicationContext,一般使用基于org.springframework.web.context.ContextLoaderListener的实现方式,需要在web.xml中添加:
<!--加载src目录下的applicationContext.xml文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--指定以ContextLoaderListener的方式启动Spring容器--!>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>