Deprecated: 自 6.9.0 版本起,使用参数调用函数 WP_Dependencies->add_data() 已弃用!IE conditional comments are ignored by all supported browsers. in D:\wwwroot\zyxy\wordpress\wp-includes\functions.php on line 6131

Deprecated: 自 6.9.0 版本起,使用参数调用函数 WP_Dependencies->add_data() 已弃用!IE conditional comments are ignored by all supported browsers. in D:\wwwroot\zyxy\wordpress\wp-includes\functions.php on line 6131

Spring资源加载:ResourceLoader与ClassPathXmlApplicationContext

好的,各位编程界的英雄豪杰,各位代码世界的探险家,今天咱们来聊聊Spring框架里一个看似低调,实则非常重要的角色——资源加载,以及它背后的两大功臣:ResourceLoaderClassPathXmlApplicationContext

想象一下,咱们的应用程序就像一座精密的城堡🏰,而各种配置文件、图片、文本等资源,就是城堡里的砖瓦、装饰品和蓝图。城堡要屹立不倒,首先得有材料,其次得知道从哪里获取这些材料,这就是资源加载的任务!

第一幕:资源加载的必要性——“巧妇难为无米之炊”

任何一个稍微复杂一点的应用程序,都不可能把所有的配置信息、业务逻辑硬编码在代码里。这样做不仅代码臃肿不堪,难以维护,而且灵活性大打折扣。就像把城堡的砖瓦直接烧铸在墙壁上,一旦想改动,只能拆墙重建,简直是程序员的噩梦!

因此,我们需要把这些资源独立出来,放在单独的文件里,运行时再加载进来。这样,修改配置只需要修改文件,而不需要重新编译代码,大大提高了开发效率和程序的健壮性。

比如说,你的数据库连接信息,如果你把它写死在代码里,换个数据库就要改代码重新部署。但如果你把数据库连接信息放在一个配置文件里,比如database.properties,只需要修改这个文件,重启应用即可,是不是方便多了?

第二幕:ResourceLoader——“资源界的百事通”

ResourceLoader是Spring框架中资源加载的核心接口,它就像一个“资源界的百事通”,能根据不同的资源路径,找到并加载对应的资源。

  • 接口定义:

    ResourceLoader接口非常简单,只有一个方法:

    public interface ResourceLoader {
        Resource getResource(String location);
    }

    getResource(String location)方法接收一个资源路径location,返回一个Resource对象。Resource接口代表一个抽象的资源,它可以是文件、URL、类路径资源等等。

  • Resource接口:

    Resource接口定义了对资源的访问操作,比如获取输入流、获取文件对象、判断资源是否存在等等。它有多个实现类,分别对应不同类型的资源:

    | Resource 实现类 | 描述 | 资源类型 |
    | —————————– | —————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————- ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————–(1000000)

  • 路径前缀:

    Resourcelocation路径可以带有不同的前缀,用于指定不同的资源位置:

    • classpath::类路径下的资源,例如classpath:config.xml
    • file::文件系统中的资源,例如file:/opt/config.xml
    • url::URL资源,例如url:http://example.com/config.xml
    • 无前缀:表示相对于当前ResourceLoader的上下文路径,通常是类路径。
  • 例子:

    ResourceLoader resourceLoader = new DefaultResourceLoader(); // 或者 ApplicationContext
    Resource resource = resourceLoader.getResource("classpath:application.properties");
    InputStream inputStream = resource.getInputStream();
    
    // 通过inputStream读取资源内容

    在这个例子中,我们创建了一个DefaultResourceLoader实例,并使用getResource()方法加载类路径下的application.properties文件。然后,我们通过getInputStream()方法获取输入流,就可以读取文件的内容了。

第三幕:ClassPathXmlApplicationContext——“ResourceLoader的得力助手”

ClassPathXmlApplicationContext是Spring IoC容器的一个实现,它从类路径下加载XML配置文件,并根据配置创建和管理Bean。它继承了AbstractXmlApplicationContext,而AbstractXmlApplicationContext又继承了AbstractRefreshableConfigApplicationContext,最终继承了AbstractRefreshableApplicationContextAbstractRefreshableApplicationContext继承了AbstractApplicationContextAbstractApplicationContext实现了ApplicationContext接口,而ApplicationContext接口又继承了ResourceLoader接口。

也就是说,ClassPathXmlApplicationContext本身就是一个ResourceLoader

  • 自动资源加载:

    ClassPathXmlApplicationContext在初始化时,会自动加载指定的XML配置文件。它会解析XML文件,读取Bean的定义,并将Bean注册到容器中。

  • 使用方式:

    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    
    // 从容器中获取Bean
    MyBean myBean = (MyBean) context.getBean("myBean");

    在这个例子中,ClassPathXmlApplicationContext会加载类路径下的applicationContext.xml文件,并根据文件中的配置创建Bean。我们可以通过getBean()方法从容器中获取Bean的实例。

  • 配置文件的位置:

    ClassPathXmlApplicationContext默认从类路径下查找配置文件。类路径指的是classpath,也就是编译后的.class文件所在的目录。在Maven项目中,通常是src/main/resources目录。

  • ResourceLoaderAware接口:

    如果你的Bean需要访问资源,可以实现ResourceLoaderAware接口。Spring容器会自动将ResourceLoader注入到Bean中。

    public class MyBean implements ResourceLoaderAware {
        private ResourceLoader resourceLoader;
    
        @Override
        public void setResourceLoader(ResourceLoader resourceLoader) {
            this.resourceLoader = resourceLoader;
        }
    
        public void processResource() throws IOException {
            Resource resource = resourceLoader.getResource("classpath:myresource.txt");
            InputStream inputStream = resource.getInputStream();
            // 处理资源
        }
    }

    在这个例子中,MyBean实现了ResourceLoaderAware接口,Spring容器会自动将ResourceLoader注入到resourceLoader属性中。MyBean就可以使用resourceLoader加载资源了。

第四幕:ResourceLoader与ClassPathXmlApplicationContext的配合——“珠联璧合,相得益彰”

ClassPathXmlApplicationContext不仅是一个IoC容器,还是一个ResourceLoader。它可以自动加载配置文件,并将ResourceLoader注入到需要访问资源的Bean中。这两者的配合,使得Spring框架在资源加载方面非常灵活和方便。

  • 配置文件中的资源引用:

    可以在XML配置文件中使用classpath:, file:, url:等前缀来引用资源。

    <bean id="myBean" class="com.example.MyBean">
        <property name="configFile" value="classpath:config.properties"/>
    </bean>

    在这个例子中,MyBeanconfigFile属性会被设置为classpath:config.properties,Spring容器会自动加载这个资源,并将其注入到MyBeanconfigFile属性中。

  • 自定义ResourceLoader:

    虽然ClassPathXmlApplicationContext已经提供了默认的ResourceLoader,但你也可以自定义ResourceLoader,并将其配置到Spring容器中。

    public class MyResourceLoader implements ResourceLoader {
        @Override
        public Resource getResource(String location) {
            // 自定义资源加载逻辑
            return new MyResource(location);
        }
    }
    
    // XML配置
    <bean id="resourceLoader" class="com.example.MyResourceLoader"/>

    通过自定义ResourceLoader,你可以实现更复杂的资源加载逻辑,比如从数据库加载资源,或者从加密文件中加载资源。

第五幕:一些高级用法和注意事项——“精益求精,追求卓越”

  • 资源路径的通配符:

    ClassPathXmlApplicationContext支持使用通配符加载多个配置文件。

    ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:applicationContext-*.xml");

    classpath*:表示加载所有类路径下的以applicationContext-开头,以.xml结尾的文件。

  • ResourcePatternResolver接口:

    ResourcePatternResolver接口扩展了ResourceLoader接口,提供了更强大的资源模式匹配功能。

    ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
    Resource[] resources = resourcePatternResolver.getResources("classpath*:*.xml");
    
    // 遍历资源
    for (Resource resource : resources) {
        // 处理资源
    }

    PathMatchingResourcePatternResolverResourcePatternResolver接口的一个实现类,它支持Ant风格的路径模式匹配。

  • 资源加载的顺序:

    当使用通配符加载多个配置文件时,资源的加载顺序是不确定的。如果配置文件之间存在依赖关系,可能会导致问题。因此,建议明确指定配置文件的加载顺序,或者使用@DependsOn注解来指定Bean的依赖关系。

  • 资源不存在的处理:

    如果资源不存在,ResourceLoader会抛出FileNotFoundException异常。因此,在加载资源时,需要进行异常处理。

    try {
        Resource resource = resourceLoader.getResource("classpath:nonexistent.properties");
        InputStream inputStream = resource.getInputStream();
        // 处理资源
    } catch (IOException e) {
        // 处理异常
        e.printStackTrace();
    }

总结:

ResourceLoaderClassPathXmlApplicationContext是Spring框架中资源加载的重要组成部分。ResourceLoader负责加载资源,而ClassPathXmlApplicationContext作为一个IoC容器,可以自动加载配置文件,并将ResourceLoader注入到需要访问资源的Bean中。理解它们的原理和用法,可以帮助我们更好地使用Spring框架,提高开发效率和程序的健壮性。

希望今天的讲解对大家有所帮助。记住,编程的世界充满了乐趣和挑战,让我们一起探索,一起进步!加油!💪

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注