使用@Autowired Null指针异常读取属性文件

时间:2017-08-09 00:25:17

标签: java spring maven autowired property-files

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

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

代码:

midis

但我继续在“String value = environment.getProperty(country);”

行获取空指针异常

我按以下方式调用该函数

@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");
    }
}

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

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

注意:我还有其他类和属性文件,我需要这样做并在applicationContext.xml中声明它们的bean。

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

2 个答案:

答案 0 :(得分:0)

查看所有applicationContext.xml会很有帮助。

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

你可能没有"扫描"包含CountryGeoFilter的包。如果CountryGeoFilter位于包com.geo中,则您的弹簧配置文件需要包含以下内容:

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

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

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

此机制的其他示例为here

答案 1 :(得分:0)

  1. 如果环境为空,即未正确注入,NPE可能会发生。
  2. 另请确保您已在属性文件中转义“:”。
  3. 检查工作示例:https://github.com/daggerok/spring-property-source-example