浅谈 Spring IoC 容器理解

小灰灰 2023-02-12 10:29 73阅读 0赞

相信接触过Spring框架的程序猿,肯定会接触容器这个概念,那么这个Spring容器究竟是什么呢?

Spring IoC 容器

Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。(看完抽象概念可能多少会有点懵,别着急,再往下看看)

Spring IoC 容器具体化

Spring 提供了以下两种不同类型的容器,分别是:

  • BeanFactory
  • ApplicationContext

BeanFactory 容器

这是一个最简单的容器,它主要的功能是为依赖注入 (DI) 提供支持,这个容器接口在 org.springframework.beans.factory.BeanFactor 中被定义。
在 Spring 中,有大量对 BeanFactory 接口的实现。其中,最常被使用的是 XmlBeanFactory 类。这个容器从一个 XML 文件中读取配置元数据,由这些元数据来生成一个被配置化的系统或者应用。轻松实现 BeanFactory

  1. //利用 ClassPathResource() 去加载在路径 CLASSPATH 下可用的 bean 配置文件
  2. XmlBeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml"));

ApplicationContext 容器

Application Context 是 BeanFactory 的子接口,也被成为 Spring 上下文。
Application Context 是 spring 中较高级的容器。和 BeanFactory 类似,它可以加载配置文件中定义的 bean,将所有的 bean 集中在一起,当有请求的时候分配 bean。
最常被使用的 ApplicationContext 接口实现(用来加载Spring配置文件):

  • FileSystemXmlApplicationContext(默认文件路径): 该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。
  • ClassPathXmlApplicationContext(默认类路径): 该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。

    //默认类路径加载Spring配置文件,classpath:(可以省略)
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(“spring.xml”);

    //默认文件路径加载Spring配置文件,file:(可以省略)
    FileSystemXmlApplicationContext ftx = new FileSystemXmlApplicationContext(“spring/src/spring.xml”);

Tips:代码展示的是默认情况下Spring配置文件加载路径,但是,如果ClassPathXmlApplicationContext 加载时指定file:(文件路径),也是可以成功加载的;相对应FileSystemXmlApplicationContext 加载时指定classpath:(类路径)也可以完成加载。


如果是Web项目加载Spring配置文件:

  1. <!-- 加载配置文件 同时需要配置监听器 -->
  2. <context-param>
  3. <param-name>contextConfigLocation</param-name>
  4. <param-value>classpath:spring.xml</param-value>
  5. </context-param>
  6. <listener>
  7. <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  8. </listener>

小结

Spring IoC 容器就是某个实现了 ApplicationContext 接口的类的实例;也可以说 Spring IoC 容器实际上就是 ApplicationContext(实例化对象)

发表评论

表情:
评论列表 (有 0 条评论,73人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Spring---IOC

    首先在说IOC之前先来说说IOC对于Spring的重要地位,Spring发展到现在,IOC真的是功不可没。  什么是IOC?(控制反转): 是一种设计思想,IOC即控制

    相关 IOC 什么是 IOC

    本文以文字为主题,并没有代码案例,仅限于记录自己对于 IOC 的理解,文中也啥特别高深的东西,大牛和大佬可以忽略本文,以免浪费您宝贵的时间 什么是 IOC ?      I