Spring中的ResourceLoaderAware小知识

本文介绍了Spring框架中Aware接口的应用场景与实现方式,详细解释了如何利用ResourceLoaderAware接口来加载并操作外部资源文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们应该明白,spring的依赖注入的最大亮点是你所有的Bean对Spring容器的存在是没有意识的,我们可以将Spring容器换成其他的容器,Spring容器中的Bean的耦合度因此也是极低的。

但是我们在实际的开发中,我们却经常要用到Spring容器本身的功能资源,所以Spring容器中的Bean此时就要意识到Spring容器的存在才能调用Spring所提供的资源。我们通过Spring提供的一系列接口Spring Aware来实现具体的功能。

首先介绍一下Spring所提供的Aware接口:

BeanNameAware               获得到容器中Bean的名称
BeanFactoryAware            获得当前bean Factory,从而调用容器的服务
ApplicationContextAware         当前的application context从而调用容器的服务
MessageSourceAware          得到message source从而得到文本信息
ApplicationEventPublisherAware      应用时间发布器,用于发布事件
ResourceLoaderAware         获取资源加载器,可以获得外部资源文件
也就是说:在Java类中可以通过文件流等的形式加载外部资源文件,并能读取资源文件中的配置,通过下面的get属性可以获取Properties中的配置属性。

public final class SettingsBean implements ResourceLoaderAware{
	private Properties settings;
	private ResourceLoader loader;
	private static final String SETTINGS_FILE = "classpath:/config/settings.properties";
	public Properties getSettings() {
		return settings;
	}
	public void setProperty(String key,String value){
		settings.setProperty(key, value);
		
	}
	public String getProperty(String key){
		return settings.getProperty(key);
	}
	
	public double getDouble(String key){
		return Double.parseDouble(settings.getProperty(key));
	}
	public int getInteger(String key){
		return Integer.parseInt(settings.getProperty(key));
	}
	public void save(){
		try {
			OutputStream outputStream = new FileOutputStream(loader.getResource(SETTINGS_FILE).getFile());
			settings.store(outputStream, "");
			outputStream.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void setResourceLoader(ResourceLoader loader) {
		this.loader = loader;
		try {
			FileInputStream inputStream  = new FileInputStream(loader.getResource(SETTINGS_FILE).getFile());
			settings = new Properties();
			settings.load(inputStream);
			inputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值