How to call a method after bean initialization is complete?
There are three different approaches to consider, as described in the reference
Use init-method attribute
Pros:
- Does not require bean to implement an interface.
Cons:
- No immediate indication in source code that this method is required after construction to ensure the bean is correctly configured.
Implement InitializingBean
Pros:
- No need to specify init-method, or turn on component scanning / annotation processing.
- Appropriate for beans supplied with a library, where we don't want the application using this library to concern itself with bean lifecycle.
Cons:
- More invasive than the init-method approach.
Use JSR-250 @PostConstruct lifecyle annotation
Pros:
- Useful when using component scanning to autodetect beans.
- Makes it clearer that a specific method is to be used for initialisation. Intent is closer to the code.
Cons:
- Initialisation no longer centrally specified in configuration.
- You must remember to turn on annotation processing (which can sometimes be forgotten)
To expand on the @PostConstruct
suggestion in other answers, this really is the best solution, in my opinion.
- It keeps your code decoupled from the Spring API (
@PostConstruct
is injavax.*
) - It explicitly annotates your init method as something that needs to be called to initialize the bean
- You don't need to remember to add the init-method attribute to your spring bean definition, spring will automatically call the method (assuming you register the annotation-config option somewhere else in the context, anyway).
You can use something like:
<beans>
<bean id="myBean" class="..." init-method="init"/>
</beans>
This will call the "init" method when the bean is instantiated.