Spring 系列篇之IoC容器

本篇文章主要是记录一下IoC容器,并基于上篇文章做一些基础测试,文章的主要概念来源于官网。并且所有demo讲解还是基于xml形式,虽然目前绝大多数公司,个人都是采用注解方式。但是为了更好理解,或者追本溯源我们还是先从xml开始练起。

1. 概念

IoC(Inversion of Control-控制反转)又可以叫 DI(依赖注入-Dependency Injection)。
控制反转:创建对象的主动权交由IoC负责
依赖注入:组件之间的关系也同样交由IoC在运行期注入

在理解此概念之前,我们先回顾一下,我们平时创建一个对象并添加属性的基本步骤。
我们拿最简单的观察者模式来解析
我们来实现一个主题(Subject)中包含多个观察者(Observer)的数据模型,如图:

Observer简单模型

如下就列举了我们平时操作对象的基本步骤

// 创建对象:主动权是开发者
Subject subject = new Subject();
Observer [] observers = new Observer[]{new Observer()};
//属性注入:同样也是开发者在编写代码时set进去的
subject.setObservers(observers);

可以看到所有对象的创建操作都是老铁们主动new出来的,所有对象属性的赋值也是老铁们主动set进去的。
而spring IoC的概念就是让我们从主动new 的这个动作解放出来的,我们只要定义对应的元数据,以及他们之间的依赖关系,咱们强大的spring IoC就会帮我们做好一切,并将他们存放在一个公共的容器中。

IoC主要组件

spring-beans(org.springframework.beans)
spring-context(org.springframework.context)
BeanFactory
ApplicationContext

org.springframework.beansorg.springframework.context是IoC容器最基本的包, BeanFactory接口提供了能够管理任何类型对象的高级配置机制,用于访问IoC容器的根接口。ApplicationContext是BeanFactory的子接口,并添加了以下功能

访问应用程序Bean工厂 方法,继承ListableBeanFactory
加载文件资源能力,继承ResourceLoader
事件发布能力,继承ApplicationEventPublisher
通用消息处理能力,继承MessageSource
特定应用程序的上下文,如WebApplicationContext

创建IoC容器

利用元数据来配置IoC容器
配置元数据的方式有xml beans-annotation-config beans-java
接下来小编会以xml形式初始化IoC容器

用xml创建元数据

我们还是用上面的主题-观察者模型来做例子

Observer

public class Observer {
}

Subject

public class Subject {
    private Observer [] observers;
}

observer.xml



    
    

subject.xml

本身xml是可以定义多个bean的,这里分成多个,目的是使用引入xml文件功能

    
        
            
                
            
        
    
    
    

创建容器

public class Chapter1Rocket {
    public static void main(String[] args) {
                //这里的构造参数也支持设置多个文件
        ApplicationContext ac = new ClassPathXmlApplicationContext("chapter1/subject.xml");
        Subject subject = ac.getBean(Subject.class);
        System.out.println(subject.getObservers());
    }
}

总结

可以看到这里我们没有自己new 也没有set值。IoC容器可以帮我们实例化对象,装配属性甚至管理整个生命周期。

3. 感谢

感谢各位老铁花时间观看!
欢迎留言指正!
内容持续更新!

你可能感兴趣的:(Spring 系列篇之IoC容器)