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

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

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

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

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


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

<beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mongo="http://www.springframework.org/schema/data/mongo"
           xsi:schemaLocation=
                   "http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd">
     </beans>

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容器去管理:

<beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:mongo="http://www.springframework.org/schema/data/mongo"
           xsi:schemaLocation=
                   "http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context.xsd
              http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
              http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans.xsd">

        <bean id="precursorWheel" class="com.PrecursorWheel"></bean>
        <bean id="rearWheel" class="com.RearWheel"></bean>
        <bean id="car" class="com.Car">
            <property name="wheel" ref="precursorWheel"></property>
        </bean>

     </beans>

通过上述的配置,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容器进行管理,自定义的内容包括:类的信息+类与类的依赖关系。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值