Я преобразовал проект Spring 4.0 из xml в javaconfig.
При инициализации один из моих beans должен получить доступ к Hibernate для извлечения некоторых конфигурационных данных из БД через Spring @Service (buildingService
). Инициализация bean выглядит следующим образом:
@Bean
@DependsOn({ "transactionManager", "webSocketHandler", "buildingService" })
Smarty smarty() {
Smarty bean = new Smarty();
bean.init(); // I also tried @Bean(initMethod = "init") with no difference
return bean;
}
Проблема заключается в том, что в bean.init()
доступ к службе осуществляется, что не удается с помощью NullPointerException
.
Я добавил buildingService
в @DependsOn
, но это не помогло.
Вероятно, классы @Service
-annotated обрабатываются после @Bean
!
Можно ли инициализировать класс @Service
-annotated самостоятельно?
Изменить 1
Спасибо за все отзывы!
Мне нужно добавить некоторые детали:
buildingService не является @Bean
, это, ну, @Service
и выглядит так:
@Service("buildingService")
@Transactional
public class BuildingService {
...
public List<Building> getAll() {
final Session session = sessionFactory.getCurrentSession();
final Query query = session.createQuery("from Building order by name");
return query.list();
}
...
}
Smarty является Spring управляемым Bean и инициализируется в @Configuration
-номенном классе, который выполняет инициализацию корневого контекста.
У Smarty есть прямая зависимость от buildingService, например:
@Resource(name = "buildingService")
private BuildingService buildingService;
Я пробовал аннотировать Smarty.init()
с помощью @PostConstruct
, но это ничего не изменило.
Обратите внимание, что первое, что Smarty.init()
делает, вызывает buildingService.getAll();