такое поведение очень нормально, потому что метод @PostConstruct
будет вызываться перед введением areaPostalCodeDao
bean-компонента в свойство areaPostalCodeDao
с нулевым значением (на данный момент).
Существует 4 способа запустить некоторый код при инициализации bean-компонента, но каждый из них завершается определенным шагом. Это следующие способы: добавление кода в конструктор , добавление метода @PostConstruct
, реализация интерфейса afterPropertiesSet()
из InitializingBean
или добавление init-method
.
После строительства будет вызван
@PostConstruct
, затем afterPropertiesSet
и затем init-method
.
Так что в вашем случае вы должны сделать, как указано выше:
import org.springframework.beans.factory.InitializingBean;
public class DefaultAreaPostalCodeService extends AbstractBusinessService implements AreaPostalCodeService,InitializingBean {
private Map<String,List<PostalCodeData>> suburbMap;
@Override
@Transactional
public void afterPropertiesSet() {
List<AreaPostalCodeModel> postalCodes = areaPostalCodeDao.getAllAreaPostalCodes();
populateSuburbMap(postalCodes);
}
}