Чтение файлов свойств, используя исключение @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
член.
Дополнительные примеры этого механизма здесь.
- NPE может произойти, если Environment имеет значение null, т.е. не было введено должным образом.
- Также убедитесь, что вы экранировали ":" в вашем файле свойств.
Проверьте работающий пример: https://github.com/daggerok/spring-property-source-example