我々は賢いので。

かんとーちほーのエンジニアの、仕事とか、趣味とか、いろいろなはなし。

今ちょっとSpringBoot触ってるんだけど、PostConstruct的なものを探してた。

備忘録っつーか、メモっていうか、チラシの裏

f:id:sugaryo1224:20180526212609j:plain

JavaEEのPostConstruct

DIコンテナでBeanを管理する、つまりインスタンスプールを利用すると言う事は、コンストラクタでインスタンスを初期化するという new ベースの自前でのインスタンス管理とは初期化の仕組みが異なって来る

で、JavaEE@ManagedBean とかは @PostConstruct でアノテートしたメソッドを初期化用に(コンストラクタの代わりに)呼び出して貰う事が出来る。

SpringBootでのPostConstruct相当は何か

探してみたけどアノテーションでは存在しないっぽい。

かわりに InitializingBean というインタフェースがあって、このインタフェースが宣言してる afterPropertiesSet と言うメソッドで、各プロパティへの注入が済んだ段階で呼び出してくれる模様。
厳密にどういうタイミングで呼び出されるのか良く解ってないので、この辺はSpringのBeanライフサイクルを調べてみる必要がある、、、のかな?

なんでこの辺の仕組みだけアノテーションベースじゃないんだろう??

逆に

@PreDestroy に相当するインタフェースとして DisposableBean というものがあるようだ。

しかしなんだ。

InitializingBeanDisposableBean ってネーミングブレてて気に食わないね?

InitializingBean に合わせるなら DisposingBean だし、
DispozableBean に合わせるなら InitializableBean だし、
個人的には後者が良いですね。

追記

Twitterの方で教えて貰いましたが @PostConstruct 使えました。

後でInitializingBeanとPostConstructの違いと言うか、使い分けを調べてみようかと思います。