Чтение файлов свойств, используя исключение @Autowired Null указатель

Мне нужно прочитать файл свойств на основе входных данных, переданных с помощью Spring Framework в проекте Maven. Мои файлы свойств и контекст приложения находятся в каталоге 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);
    }

My applicationContext.xml(src/main/resources)

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

Примечание: у меня есть другие классы и файлы свойств, для которых мне нужно сделать то же самое, и их бины объявлены в applicationContext.xml.

Я довольно новичок в весне и не уверен, где я иду не так. Любая помощь будет оценена.

2 ответа

Решение

Было бы полезно увидеть все 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 член.

Дополнительные примеры этого механизма здесь.

  1. NPE может произойти, если Environment имеет значение null, т.е. не было введено должным образом.
  2. Также убедитесь, что вы экранировали ":" в вашем файле свойств.

Проверьте работающий пример: https://github.com/daggerok/spring-property-source-example

Другие вопросы по тегам