Spring核心之一:Spring的配置文件是干什么的

前面两篇文章讲解了 IOC、DI的概念,以及我们为什么需要他们。这篇文章将继续讲述,SpringIOC容器的定义形式——xml配置文件,将弄清楚两个疑问:
1. Spring xml配置文件的作用。(与IOC思想一脉相承的)
2. 如果定义Bean以及Bean之间的依赖关系。(只说明最简单的方式,关于这个的更详细的用法,后续会再写文章讲述)

当你的程序整合一些工具的时候,比如数据库、Redis、Mongodb等,网上的教程都是在Spring配置文件中加这个加那个,其实只有两个目的:

1. 将这些工具类放在配置文件中,Spring框架会去读配置文件,然后实例化这些类的对象,存储在Spring容器中(内存中),可以随时从容器中获取并使用。

2. 我们在配置文件中指定类与类之间的依赖关系,而不是在代码中去写这些依赖关系。


我们来看一下Spring的配置文件。


     

spring配置文件采用schema格式,如上。beans标签是 xml配置文件的根节点;xmlns这些属性都是命名空间,在Beans标签下写一些其他标签,要想被识别,基本都需要导入对应的命名空间,这样才会被识别。

以下是待配置依赖关系的Java代码(这段代码最好详细看看,很有代表意义!!!):

/**
 * Car类是一个调用类,其有一个成员变量wheel,依赖于Wheel接口
 */
public class Car {
    private Wheel wheel;
    public void truckRun(){
        wheel.trun();
    }
}

/**********下面是Wheel接口及其两个实现类*****************************/
public interface Wheel {
    void trun();
}

/**
 * 前驱轮的实现类
 */
public class PrecursorWheel implements Wheel{
    @Override
    public void trun() {
        System.out.println("precursor trun!");
    }
}

/**
 * 后驱轮子的实现类
 */
public class RearWheel implements Wheel{
    @Override
    public void trun() {
        System.out.println("rear trun!");
    }
}

我们可以看到,Car类要想成功执行run()方法,必须去调用 Wheel 的一个实现类的方法。但是我们并没有 在Car类中去写代码来说明Car类的wheel成员变量指向哪一个Wheel实现类,这个指向的控制权,我们把它放到一个集中的配置文件中——Spring配置xml文件。

这就是我上面说的那句话的意思:


我们在Spring配置文件中指定类与类之间的依赖关系,而不是在代码中去写这些依赖关系。

在Beans标签内,通过Bean标签来配置我们的实例(所以我们常称Spring管理的对象叫Bean对象),将其指定给Spring容器去管理:



        
        
        
            
        

     

通过上述的配置,Spring容器中将会存储三个名字叫 precursorWheel、rearWheel、car的 实例对象(默认是单例的)。

而car实例的 wheel字段,通过 property标签,指定 给了 precursorWheel 这个对象。业务表现上来说,car对象是前驱驱动的车子。显然,我们将 Car类 和 PrecursorWheel类的依赖关系 转移到了配置文件中,也许从这个例子中我们看不出 依赖关系定义到配置文件中 比 定义到 Car类中 的优势在哪里,但是我们应该联想到:

一个应用程序中,类与类之间的依赖关系是在非常多的。比如C与D、A与D、F与D依赖,如果我们全部写在代码中,一旦需求有变,需要将D类改为B类,那我们至少将要修改 A、C、F类的信息,代码量改动非常大。
如果将依赖关系放在配置文件中,我们只需要改集中的配置文件就好了,改动起来将会非常简洁方便,而且类与类的依赖关系在配置文件中也非常明了,方便修改。

总结,Spring配置文件的作用:
提供自定义的方式,将类的实例交给Spring的Bean容器进行管理,自定义的内容包括:类的信息+类与类的依赖关系。

你可能感兴趣的:(Spring学习笔记)