0

我需要根据在 Maven 项目中使用 spring 框架传递的输入来读取属性文件。我的属性文件和应用程序上下文存在于 src/main/resources 下

我正在尝试使用环境 api 来注入属性文件。

代码:

@Component
@Configuration
@PropertySource("classpath:GeoFilter.properties")
public class CountryGeoFilter {

    @Autowired
    public Environment environment;

    public GeoFilterStore getCountryGeoFilter(String country) throws 
CountryNotFoundException, IOException {

    GeoFilterStore countryFilterStore = new GeoFilterStore();

    String value = environment.getProperty(country);
    if (value == null) {
        throw CountryNotFoundException.getBuilder(country).build();
    }
    String[] seperateValues = value.split(":");

    countryFilterStore.setGameStore(isTrueValue(seperateValues[0]));

    countryFilterStore.setVideoStore(isTrueValue(seperateValues[1]));
    return countryFilterStore;
    }

    private boolean isTrueValue(String possibleTrueValue) {
        return !possibleTrueValue.equals("No") && 
        !possibleTrueValue.equals("N/A");
    }
}

但我在“String value = environment.getProperty(country);”行不断收到空指针异常

我正在以下列方式调用该函数

    try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");) {
        CountryGeoFilter objGeo = (CountryGeoFilter) context.getBean("geoFilter");
        GeoFilterStore responseStore = objGeo.getCountryGeoFilter(country);
    }

我的 applicationContext.xml(src/main/resources)

<bean id="geoFilter"
    class="com.package.CountryGeoFilter" />

注意:我有其他类和属性文件,我需要对其执行相同操作,并在 applicationContext.xml 中声明它们的 bean。

我对春天很陌生,不知道我哪里出错了。任何帮助,将不胜感激。

4

2 回答 2

0

查看全部内容会很有帮助applicationContext.xml

没有看到applicationContext.xml,我的答案只是一个猜测。

您可能没有“扫描”包含CountryGeoFilter. 如果CountryGeoFilter在包中,com.geo您的 spring 配置文件将需要包含以下内容:

<context:component-scan base-package="com.geo" />

CountryGeoFilter@Component注释。除非 Spring 知道类定义,否则这个注解是没有意义的。为了了解包含此注解的类,Spring 会扫描<context:component-scan/>元素中标识的包。

当 Spring 扫描这个类定义时,它会创建一个 bean,它是这个类的一个单例实例。创建实例后,它将自动装配您的Environment成员。

此机制的其他示例在此处

于 2017-08-09T00:46:44.593 回答
0
  1. 如果 Environment 为空,即未正确注入,则可能发生 NPE。
  2. 还要确保您已经在属性文件中转义了“:”。

检查工作示例:https ://github.com/daggerok/spring-property-source-example

于 2017-08-09T01:09:36.977 回答