Spring中的ResourceLoaderAware小知识

来源:互联网 发布:python 绝技 源码 编辑:程序博客网 时间:2024/06/03 11:07

我们应该明白,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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic 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();}}}