Кажется, я столкнулся с странным поведением java-компилятора. В основном у меня был код ниже в классе java
@Autowired
SubProcessDao subProcessDao;
@Autowired
ProcessDao processDao;
public void startProcess(BatchDetail batchDetail){
processDao.process(batchDetail.getCode());//// Line1
}
Когда он был развернут на сервере нашей командой сборки, над частью кода началось сбой в строке 1, где processDao вызывает метод обработки из-за исключения Null-указателя.
Я был удивлен, увидев это, потому что он отлично работал на всех машинах, и код тоже выглядел отлично. Но в ходе дальнейшего расследования я обнаружил, что файл.class для выше, который присутствовал в военном файле, кажется, отсутствовал @Autowired аннотация для processDao... Файл.class при декомпиляции выглядел следующим образом:
@Autowired
SubProcessDao subProcessDao;
ProcessDao processDao;
см. отсутствие @Autowired annotaion на ProcessDao. В svn-репозитории, где код сборки команды сборки, никогда не было экземпляра, когда @Autowired аннотации отсутствовали в ProcessDao. Кто-нибудь сталкивался с такой проблемой? Или кто-то может объяснить такое поведение
Используемая здесь версия java - 1.6.27, а используемый инструмент построения - maven
Возможно, в классе ProcessDao вы забыли объявить его как Spring bean, используя, например, @Component