Spring IOC概念

啥IOC???干嘛用的,为啥Java有那么多的闹眼子的词。今天带您来看看这个是个啥……

IOC Inverse Of Control 控制反转

反转是中思想,将类的实例化和管理交给Spring(包括关系处理垃圾回收等),我们只需要去Spring这个容器中取即可

传统与反转的区别

传统的

图片来源网络

反转

控制反转在Spring中是如何做到的?

控制反转是一种通过描述(在 Java 中可以是 XML 或者注解)并通过第三方(Spring)去产生或获取特定对象的方式。

Spring IOC容器

spring将class注册进入(称为bean),然后通过xml描述的方式完成依赖等配置关系,然后我们可以从Spring中以描述

的方式获取到bean

IOC容器的组成

容器主要有两个主要成员(均为interface)

BeanFactory

ApplicationContext

其中ApplcationContext是BeanFactory的子接口,BeanFactory的子类

由于是BeanFactory的扩展,因此我们通常使用ApplicationCOntext来作为IOC的容器

下面列举一些beanfactory的方法

Application的常见实现

1.ClassPathXmlApplicationContext:

这个是读取classpath中资源文件,因此可以使用资源文件的名称来读取

ApplicationContext ctx =newClassPathXmlApplicationContext("applicationContext.xml");

2:FileSystemXmlApplicationContext:-

基于文件路径的

ApplicationContext ac =newFileSystemXmlApplicationContext("c:/applicationContext.xml");

3 web环境下的

XmlWebApplicationContext ac = new XmlWebApplicationContext(); // 这时并没有初始化容器ac.setServletContext(servletContext); // 需要指定ServletContext对象ac.setConfigLocation("/WEB-INF/applicationContext.xml"); // 指定配置文件路径,开头的斜线表示Web应用的根目录ac.refresh(); // 初始化容器

BeanFactory 和 ApplicationContext 的区别:

BeanFactory:是Spring中最底层的接口,只提供了最简单的IoC功能,负责配置,创建和管理bean。

在应用中,一般不使用 BeanFactory,而推荐使用ApplicationContext(应用上下文),原因如下。

ApplicationContext:

1.继承了 BeanFactory,拥有了基本的 IoC 功能;

2.除此之外,ApplicationContext 还提供了以下功能:

支持国际化;

支持消息机制;

支持统一的资源加载;

支持AOP功能;

注意:Bean 的定义和初始化在 Spring IoC 容器是两大步骤,它是先定义,然后初始化和依赖注入的。

Bean 的定义分为 3 步:

1.Resource 定位

Spring IoC 容器先根据开发者的配置,进行资源的定位,在 Spring 的开发中,通过 XML 或者注解都是十分常见的方式,定位的内容是由开发者提供的。

2.BeanDefinition 的载入

这个时候只是将 Resource 定位到的信息,保存到 Bean 定义(BeanDefinition)中,此时并不会创建 Bean 的实例

3.BeanDefinition 的注册

这个过程就是将 BeanDefinition 的信息发布到 Spring IoC 容器中

注意:此时仍然没有对应的 Bean 的实例。

做完了以上 3 步,Bean 就在 Spring IoC 容器中被定义了,而没有被初始化,更没有完成依赖注入,也就是没有注入其配置的资源给 Bean,那么它还不能完全使用。

对于初始化和依赖注入,Spring Bean 还有一个配置选项——【lazy-init】,其含义就是是否初始化 Spring Bean。在没有任何配置的情况下,它的默认值为 default,实际值为 false,也就是Spring IoC 默认会自动初始化 Bean。如果将其设置为 true,那么只有当我们使用 Spring IoC 容器的 getBean 方法获取它时,它才会进行 Bean 的初始化,完成依赖注入。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190908A07HSF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券