Spring——依赖注入(IoC)基本原理

解释依赖注入

不需要再硬编码直接调用组装组件和服务,而是在配置文件里定义、描述组件服务及其依赖关系,之后由容器(IOC容器)负责组件和服务的加载、生成、初始化、组装、分发、销毁等管理。

Spring注入方式

  • 接口注入 (接口方式注入,实现多态)
  • 属性注入(属性的SET/GET,实现可选依赖
  • 构造注入(构造方法注入,实现强制依赖

使用构造函数依赖注入时,Spring保证所有一个对象所有依赖的对象先实例化后,才实例化这个对象。
使用set方法依赖注入时,Spring首先实例化对象,然后才实例化所有依赖的对象。
当设值注入与构造注入同时存在时,先执行构造注入,再执行设值注入。

Spring框架中的IoC

  • Spring中的 org.springframework.beans 包和 org.springframework.context包构成了Spring框架IoC容器的基础。
  • BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能
  • ApplicationContex接口对BeanFactory(是一个子接口)进行了扩展,在BeanFactory的基础上添加了其他功能,比如与Spring的AOP更容易集成,也提供了处理message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对Web应用的WebApplicationContext。
  • org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具体实现,用来包装和管理前面提到的各种bean。BeanFactory接口是Spring IoC 容器的核心接口。

BeanFactory和ApplicationContext有什么区别

  • BeanFactory和ApplicationContext都是接口,并且ApplicationContext是BeanFactory的子接口。
  • BeanFactory可以理解为含有bean集合的工厂类.BeanFactory包含了bean定义、bean关联关系的设置、根据请求分发bean、bean生命周期的控制的功能
  • application context扩展了BeanFactory,还提供了其他的功能。
    • 国际化的功能
    • 消息发送、响应机制(继承至MessageSource )
    • 统一加载资源的功能(继承至ResourceLoader)
    • 强大的事件机制( 继承至ApplicationEventPublisher)
    • 对Web应用的支持()
  • 它们的加载方式不同:
    • BeanFactory采用的是延迟加载的形式来注入Bean,即只有在使用某个bean的时候,才对该Bean进行加载实例化.好处是节约内存,缺点是速度比较慢.
    • ApplicationContext则相反的,它是在Ioc容易启动时就一次性创建所有的Bean,这样的好处是可以马上发现Spring配置文件中的错误;坏处就是浪费内存。
  • 以下是三种较常见的 ApplicationContext 实现方式:
    1、ClassPathXmlApplicationContext:从classpath的XML配置文件中读取上下文,并生成上下文定义.应用程序上下文从程序环境变量中取得.
    ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
    2、FileSystemXmlApplicationContext :由文件系统中的XML配置文件读取上下文。
    ApplicationContext context = new FileSystemXmlApplicationContext("bean.xml");
    3、XmlWebApplicationContext:由Web应用的XML文件读取上下文。
Spring——依赖注入(IoC)基本原理_第1张图片

IoC对象容器

所有的对象都必须创建;或者说:使用对象之前必须先创建。而使用ioc之后,你就可以不再手动创建对象,而是由ioc容器帮我们实现对象的创建、注入等过程。

Spring——依赖注入(IoC)基本原理_第2张图片
Spring——依赖注入(IoC)基本原理_第3张图片
Spring——依赖注入(IoC)基本原理_第4张图片
Spring——依赖注入(IoC)基本原理_第5张图片
Spring——依赖注入(IoC)基本原理_第6张图片

ref:https://my.oschina.net/u/3080373/blog/903341

你可能感兴趣的:(Spring——依赖注入(IoC)基本原理)