Spring 4.0 ベースのプロジェクトを xml から javaconfig に変換しました。
初期化時に、Bean の 1 つが Hibernate にアクセスして、Spring @Service ( buildingService
) を介して DB から構成データをフェッチする必要があります。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
注釈付きのクラスは@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
、ルート コンテキストの初期化を行う -annotated クラスで初期化されます。
Smarty は、次のように buildingService に直接依存しています。
@Resource(name = "buildingService")
private BuildingService buildingService;
で注釈Smarty.init()
を付けてみまし@PostConstruct
たが、これは何も変わりませんでした。
Smarty.init()
最初に行うことは呼び出しであることに注意してくださいbuildingService.getAll();