0
点赞
收藏
分享

微信扫一扫

SpringIOC如何加载配置文件

码农K 2022-04-16 阅读 62

目录

1、本篇博客的背景和目的

2、上一篇文章地址链接

3、SpringFramework配置文件加载的一些思想

4、配置文件加载的代码

5、在main方法中测试

6、我的POM文件

7、我的下一篇文章链接


1、本篇博客的背景和目的

目前我本人在学习SpringFramework,这也是这个专栏的主题。我前面本专栏的三篇博客主要是简单的认识了一下SpringFramework,简单搭建好了环境可以运行代码,然后模拟了一下SpringIOC对Bean对象实例化的过程。

本篇博客记录一下SpringIOC是如何加载配置文件的,或者说怎么使用SpringFramework加载配置文件。

2、上一篇文章地址链接

SpringIOC的Bean对象实例化的模拟实现_你是我的日月星河的博客-CSDN博客icon-default.png?t=M3C8https://blog.csdn.net/weixin_46281472/article/details/123955065 

3、SpringFramework配置文件加载的一些思想

首先需要说一下的是,根据配置文件来源的不同,配置文件加载分为两种,分别是绝对路径配置文件的加载和相对路径配置文件的加载。

绝对路径配置文件的加载就是我们在自己的电脑上面编码,将配置文件放在自己计算机别的某一个文件夹下,也就是不在项目内(这种骚操作我想肯定是很少有人用的

相对路径配置文件加载就是配置文件保存在项目文件夹中,也就是resource文件夹下。

配置文件可以加载单个,也可以加载多个。

再想一下,由于配置文件中配置的是Bean实体类,如果一个项目稍微大一点的话,可能会有很多个模块,每一个模块中也有很多个实体类,那么我们就不可能把所有的实体类Bean标签写在一个配置文件中。那么我们就会写很多个配置文件,这些配置文件都需要被加载,那么我们肯定就要选择加载多个配置文件了。那么我们加载多个配置文件的时候,难道要一个一个的写文件名然后加载吗?显然这是不可能的。SpringFramework提供了一个总配置文件,我们可以在总配置文件中引入一个一个的配置文件,然后只需要加载这个总配置文件就可以啦!

4、配置文件加载的代码

对路径配置文件加载:BeanFactory factory=new ClassPathXmlApplicationContext("配置文件的相对路径");

对路径配置文件加载:BeanFactory factory=new FileSystemXmlApplicationContext("配置文件的绝对路径");

我们加载单个配置文件的时候,就跟上面的是一样的。

加载多个配置文件的时候,如果配置文件数量不多,就三四个,我们可以不使用总配置文件的方法,直接写上去就行了,代码如下(这里我就不举例绝对路径配置文件加载的那种了,是同理的):

ApplicationContext factory=new ClassPathXmlApplicationContext("配置文件路径1","配置文件路径2");  (ApplicationContext接口是BeanFactory接口的子接口,功能更强大点

但是,如果配置文件有很多,那么我们就需要使用总配置文件的形式了,代码如下:

首先是我们的总配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

<!--    这里我们导入其他的配置文件-->

    <import resource="spring.xml"></import>
    <import resource="service.xml"></import>
</beans>

总配置文件的名字是springFramework.xml。里面引入了两个配置文件。因为我的这个项目丢失了,就不展示代码结构了。总配置文件和两个分配置文件我都写在了resource目录下面,没有再套文件夹。如果在开发中,resource目录下有再套文件夹的话,import标签里面是需要使用相对地址的,假如service.xml文件在下图中的文件夹中:

很明显,service.xml文件外面套了一个service文件夹,那么在我们的总配置文件springFramework.xml文件中,就需要使用下面的语句:

  <import resource="service/service.xml"></import>

 加上了相对地址,这样才会正确的将service配置文件引入进来;

5、在main方法中测试

在main方法中需要首先加载配置文件,将实体类交给SpringIOC管理,我们才能不使用new的方式直接获得对应的实体类,这个代码在我的下面博客链接里面有代码:SpringFramework简单的环境搭建_你是我的日月星河的博客-CSDN博客_springframework 环境搭建icon-default.png?t=M3C8https://blog.csdn.net/weixin_46281472/article/details/123657647

我就不再次解释了,我直接粘贴代码了:

package com.dcy;

import com.dcy.service.UserService;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/*
   这里我们说一下关于配置文件的加载
    我们可以通过相对路径加载,也可以通过绝对路径加载
    相对路径:BeanFactory beanFactory=new ClassPathXmlApplicationContext("配置文件名字");
    绝对路径:BeanFactory factory=new FileSystemXmlApplicationContext(" 文件的绝对路径")

    我们可以加载一个配置文件,也可以加载多个配置文件
    这里我们就只说相对路径:
        如果有多个配置文件的话,
            1、BeanFactory beanFactory=new ClassPathXmlApplicationContext("配置文件名1","配置文件名2");
                可以无限制的写下去,它是有这样的构造方法的
            2、设置一个总的配置文件,在总配置文件中导入需要加载的配置文件, 这一点有点类似于MyBatis
               并且当我们在写总配置文件的时候,它是有提醒的,不用担心写错
               BeanFactory beanFactory=new ClassPathXmlApplicationContext("总配置文件名");


 */
public class Starter {
    public static void main(String[] args) {
        //首先看我们使用相对路径加载
        //我们使用了BeanFactory这个接口,  这个接口是 ApplicationContext接口的父接口
        BeanFactory factory=new ClassPathXmlApplicationContext("springFramework.xml");
        //下面是我们的绝对路径
        //BeanFactory factory=new FileSystemXmlApplicationContext("G:\\IDEAWorkspace\\spring03\\src\\main\\resources\\spring.xml");
        UserService userService = (UserService) factory.getBean("userService");
        userService.test();
        //很显然,我们使用绝对路径是很少的,基本就不可能使用到绝对路径
        //这里我们得到绝对路径,直接右键这个文件,复制完绝对路径以后粘贴在这里就可以啦

    }
}

main方法是可以正常运行的。

这里还有一种情况:我上面例子的代码中,总配置文件是直接放在resource根目录文件下的,所以我才在main方法中直接加载了总配置文件springFramework.xml,那如果总配置文件也在某一个文件夹内呢?就比如下图中的文件结构:

明显的,我将总配置文件放在了ALL文件夹下。那么这个时候我们main方法中加载总配置文件的语句也会改变,需要带上总配置文件的相对地址。main方法的加载总配置文件的语句如下:

 ApplicationContext ac=new ClassPathXmlApplicationContext("ALL/springFramework.xml");

这个时候,有一点我忽略的是,总配置文件也发生了改变,变成了下面的模样:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--    这里我们导入其他的配置文件-->

    <import resource="../spring.xml"></import>
    <import resource="../service/service.xml"></import>
</beans>

import标签里面,引入的配置文件前面都加上了  ../     略微知道Linux命令的应该知道(或者经常编写HTML代码的),../  表示回到本文件的根目录下

多说一下:其实IDEA这个工具还是很智能的,我只是将springFramework.xml文件剪切到了新建好的ALL文件夹里面,直接按照IDEA的提示Refactor(重构),然后main方法和springFramework.xml文件,这两个地方关于文件路径的代码就自己更改重构好了,还是令我挺意外的!!为IDEA点个赞!!

6、我的POM文件

上面的代码不需要特别的依赖,只需要下面的依赖就行:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dcy</groupId>
    <artifactId>WebPractice</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.12.RELEASE</version>
        </dependency>
    </dependencies>

</project>

这个依赖是Spring最基本的依赖。

7、我的下一篇文章链接

举报

相关推荐

0 条评论