IOC是什么?
控制反转,是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 百度百科
Spring IOC是什么?
Spring IOC是通过DI(依赖注入)实现的。
org.springframework.context.ApplicationContext接口代表Spring IoC容器,并负责实例化,配置和组装Bean。容器通过读取配置元数据来获取有关要实例化,配置和组装哪些对象的指令。配置元数据以XML,Java批注或Java代码表示。它使您能够表达组成应用程序的对象以及这些对象之间的丰富相互依赖关系。
- 注入方式
-
构造方法注入
此方法注入属于强制依赖项<bean id="studentService" class="StudentService"> <constructor-arg ref="studentDao"/> </bean>
循环依赖问题:springIOC容器会检测循环引用,抛出BeanCurrentlyInCreationException
-
setter方法注入
创建对象时没有明确的限制,可以直接使用默认构造函数; 如果有某个成员必须有值,则获取对象是有可能set方法没有执行。<bean id="accountService2" class="com.itheima.service.impl.AccountServiceImpl2"> <property name="name" value="TEST" ></property> <property name="age" value="21"></property> <property name="birthday" ref="now"></property> </bean>
-
接口方式
容器实现
- BeanFactory: IOC 容器的基本实现.
- ApplicationContext:提供了更多的高级特性.是BeanFactory的子接口.
BeanFactory 是Spring框架的基础设施,面向Spring本身;ApplicationContext面向使用Spring框架的开发者,几乎所有的应用场合都直接使用 ApplicationContext 而非底层的BeanFactory。
ApplicationContext的主要实现类:
- ClassPathXmlApplicationContext:从类路径下加载配置文件,要求配置文件必须在类路径下(常用)
- FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件(必须有访问权限)
- AnnotationConfigApplicationContext:它是用于读取注解创建容器的,是明天的内容。
ConfigurableApplicationContext扩展于ApplicationContext,新增加两个主要方法:refresh()和close(), 让 ApplicationContext具有启动、刷新和关闭上下文的能力。
ApplicationContext 在初始化上下文时就实例化所有单例的Bean。
WebApplicationContext是专门为WEB应用而准备的,它允许从相对于WEB根目录的路径中完成初始化工作。