У меня были похожие проблемы, но я был новичком в Spring.
Я пытался загрузить свойства в @Service и пытался использовать @Value для получения значения свойства с помощью ...
@Autowired
public @Value("#{myProperties['myValue']}") String myValue;
Я провожу целый день, пробуя различные комбинации аннотаций, но они всегда возвращают ноль.
В конце ответ как всегда очевиден после факта.
1) убедитесь, что Spring сканирует ваш класс на наличие аннотаций, включив иерархию пакетов
В вашем servlet.xml (он будет сканировать все, что ниже базового значения, которое вы вставляете.
2) Убедитесь, что вы НЕ «новичок» в классе, который вы только что сказали Spring. Вместо этого вы используете @Autowire в классе @Controller.
Все, что в Spring, - это Singleton, и что происходило, когда Spring загружал значения в свой Singleton, тогда я «создал» новый экземпляр класса, который не содержал вновь загруженных значений, поэтому он всегда был нулевым.
Вместо этого в @Controller используйте ...
@Autowired
private MyService service;
Отладка ...
Одна вещь, которую я сделал, чтобы найти это, состояла в том, чтобы расширить мое Служение следующим образом ...
@Service
public class MyService implements InitializingBean
Затем вставьте операторы отладки в ...
@Override
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
LOGGER.debug("property myValue:" + myValue);
}
Здесь я мог видеть значение, устанавливаемое при инициализации, и позже, когда я напечатал его в методе, он был нулевым, так что это было хорошей подсказкой для меня, что это был не тот же экземпляр.
Еще одна подсказка к этой ошибке заключалась в том, что Tomcat жаловался на то, что Timeouts пытается прочитать из Socket с Unable для синтаксического анализа HTTPheader ... Это было потому, что Spring создал экземпляр службы, и я тоже, так что мой делал реальная работа, и Spring рассчитывал на ее экземпляр.