IOC概念和原理
-
什么是IOC
控制反转,为了将系统的耦合度降低,把对象的创建和对象直接的调用过程权限交给Spring进行管理。
-
IOC底层原理
-
XML解析
通过Java代码解析XML配置文件或者注解得到对应的类的全路径,获取对应的Class类
Class clazz = Class.forName("全路径");
-
工厂设计模式
-
反射
利用第一步得到的clazz,和工厂模式创建对应的对象并返回
public static Object factory(){ return clazz.newInstance(); }
-
IOC接口
Spring提供了IOC容器实现的两种方式。
-
BeanFactory 接口 (懒加载)
BeanFactory 是 Spring 的“心脏”。它就是 Spring IoC 容器的真面目。
Spring 使用 BeanFactory 来实例化、配置和管理 Bean。是IOC容器的最顶级核心接口, 它定义了IOC的基本功能。
主要定义了一些获取bean的方法。
-
ApplicationContext (饿加载)
ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的功能。
在BeanFactory中,很多功能需要以编程的方式实现,而在ApplicationContext中则可以通过配置实现。
主要实现类有两个
-
FileSystemXmlApplicatonContext
通过系统绝对路径加载配置文件
-
ClassPathXmlApplicationContext
通过类路径(src)加载配置文件
-
二者区别
- BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时,才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。
- 而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误。 相对于基本的BeanFactory,ApplicationContext
唯一的不足是占用内存空间。当应用程序配置Bean较多时,程序启动较慢。但是在后期调用的时候,不需要等待创建。