Reputation: 29349
I have a use case where I need to call a (non-static) method in the bean only-once at the ApplicationContext load up. Is it ok, if I use MethodInvokingFactoryBean for this? Or we have a some better solution?
As a side note, I use ConfigContextLoaderListener to load the Application Context in web application. And want, that if bean 'A' is instantiated just call methodA() once.
How can this be done nicely?
Upvotes: 280
Views: 387832
Reputation: 1499840
Have you tried implementing InitializingBean
? It sounds like exactly what you're after.
The downside is that your bean becomes Spring-aware, but in most applications that's not so bad.
Upvotes: 42
Reputation: 50227
There are three different approaches to consider, as described in the reference
Upvotes: 116
Reputation: 403441
To expand on the @PostConstruct
suggestion in other answers, this really is the best solution, in my opinion.
@PostConstruct
is in javax.*
)Upvotes: 359
Reputation: 15
To further clear any confusion about the two approach i.e use of
@PostConstruct
andinit-method="init"
From personal experience, I realized that using (1) only works in a servlet container, while (2) works in any environment, even in desktop applications. So, if you would be using Spring in a standalone application, you would have to use (2) to carry out that "call this method after initialization.
Upvotes: -9
Reputation: 4678
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.
Upvotes: 209
Reputation: 14952
You could deploy a custom BeanPostProcessor in your application context to do it. Or if you don't mind implementing a Spring interface in your bean, you could use the InitializingBean interface or the "init-method" directive (same link).
Upvotes: 8