IOC容器底层原理(接口)
本篇文章只是简单的介绍, 具体需要详细阅读源码, 后期源码篇文章中将会介绍ApplicationContext, BeanFactory的继承体系, 工作原理等等
IOC思想基于IOC容器完成, IOC容器底层就是工厂对象
- 也就是IOC容器实质上就是对象工厂
Spring提供IOC容器实现的两种方式: (两个接口)
- BeanFactory : IOC容器基本实现, 是Spring内部使用的接口, 一般不提供开发人员使用此接口
- 加载配置文件时不会创建对象, 在获取对象时,也就是使用时才去创建对象
- ApplicationContext : BeanFactory接口的子接口, 提供更多更强大的功能, 一般由开发人员使用
- 加载配置文件时就会把在配置文件中的对象进行创建
注意: 这里只是bean是单例的时候如果是ApplicationContext接口, 那么会在加载配置文件的时候对对象进行创建, 但是如果bean的作用域的是多实例类的时候, 那么即使是ApplicationContext接口, 我们的对象也是在具体要获取的时候, 也就是调用getBean()方法的时候才创建
由于我们现在都是Spring结合web开发, 所以我们一般都是将这些花费时间和资源的过程放到服务器启动的时候去执行是最好的, 也就是在服务器启动时就去加载此时的xml配置文件, 去创建对应的对象
- 这个时候就能使用到我们在Servlet中学习过的监听器中的ServletContextListener监听器了, 这个监听器是监听的web服务器的启动和关闭
- 其实ServletContextListener是监听ServletContext对象的创建和销毁的, 而ServletContext上下文对象是在web服务器启动的时候创建, 在web服务器关闭的时候销毁
ApplicationContext接口有两个主要的实现类:
- FileSystemXmlApplicationContext
- 形参位置传入配置文件路径时要传入配置文件在系统中的位置, 也就是从盘符开始
- ClassPathXmlApplicationContext
- 形参位置传入配置文件路径时要传入在src文件夹之下的配置文件路径, 也就是相对于类路径之下
- 相对于类路径就是相对于src之下
- 所以我们一般都是将Spring配置文件直接放到项目的src文件夹之下, 然后直接通过这个ClassPathXmlApplicationContext类的构造器加载对应在src下的配置文件
- 这两个类都在org.springframework.context.support包下
补充:
ConfigurableApplicationContext接口继承了ApplicationContext接口, ConfigurationApplicationContext接口中有一些扩展功能, 我们后面可能会了解到这个ConfigurationApplicationContext接口