【Spring】13 ResourceLoaderAware 接口

2023-12-20 06:32:38


Spring 框架为开发者提供了丰富的扩展点,其中之一就是 Bean 生命周期中的回调接口。本文将专注介绍一个与资源加载相关的接口 ResourceLoaderAware,探讨它的作用、用法,以及在实际开发中的应用场景。

1. 简介

在 Spring 中,ResourceLoaderAware 接口是一个回调接口,它提供了一个用于设置 Bean 所在的ResourceLoader 的方法。当一个 Bean 实现了 ResourceLoaderAware 接口时,在该 Bean 实例被实例化后,Spring 容器会调用 setResourceLoader 方法,并将该 Bean 所在的 ResourceLoader 作为参数传递进去。

源码如下

在这里插入图片描述

2. 作用

ResourceLoaderAware 主要用于获取加载当前 Bean 的 ResourceLoader,使得 Bean 能够在运行时获取到关于资源加载的能力。

3. 使用

要让一个Bean实现 ResourceLoaderAware 接口,需要按以下步骤进行

在这里插入图片描述

3.1 创建并实现接口
package org.example.cheney;

import org.springframework.context.ResourceLoaderAware;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;

import java.io.InputStream;

public class DemoBean implements ResourceLoaderAware {
    private ResourceLoader resourceLoader;

    @Override
    public void setResourceLoader(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
        System.out.println("【ResourceLoaderAware】: 通过 ResourceLoader 创建 Bean");
    }

    public void loadResource(String resourceName) throws Exception {
        // 使用 ResourceLoader 加载资源
        System.out.println("加载的文件名是: " + resourceName);
        Resource resource = resourceLoader.getResource(resourceName);
        InputStream inputStream = resource.getInputStream();
        // 读取资源内容
        byte[] contentBytes = new byte[inputStream.available()];
        inputStream.read(contentBytes);
        String content = new String(contentBytes);
        System.out.println("文件内容:\n" + content);
    }
}

资源文件:

在这里插入图片描述

3.2 配置 Bean 信息
<?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
           http://www.springframework.org/schema/beans/spring-beans.xsd"
       >
    <bean id="demoBean" class="org.example.cheney.DemoBean"/>
</beans>

3.3 创建启动类
package org.example.cheney;

import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) throws Exception {
        String location = "applicationContext.xml";
        try (AbstractXmlApplicationContext context = new ClassPathXmlApplicationContext(location)) {
            DemoBean demo = (DemoBean) context.getBean("demoBean");
            demo.loadResource("classpath:demo.txt");
            System.out.println("End.");
        }
    }
}

3.4 启动

输出结果:

在这里插入图片描述

4. 应用场景

ResourceLoaderAware 接口通常用于以下场景:

  • 加载资源:

    当一个 Bean 需要在运行时加载外部资源时,可以使用 ResourceLoaderAware 获取 ResourceLoader 并使用它加载资源

  • 处理资源相关逻辑:

    当一个 Bean 与资源相关的操作时,例如读取配置文件、加载模板文件等,可以使用 ResourceLoaderAware 获取 ResourceLoader

总结

Spring 框架为开发者提供了丰富的扩展点,其中之一就是 Bean 生命周期中的回调接口。ResourceLoaderAware 接口为开发者提供了一种简单而有用的方式来获取 Bean 所在的 ResourceLoader ,从而实现对资源加载的灵活控制。通过实现该接口,Bean 可以在初始化阶段获取 ResourceLoader,并使用它加载资源或进行与资源相关的逻辑。

文章来源:https://blog.csdn.net/yanyc0411/article/details/135092863
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。