Spring core. Default @Bean destroy method

Sergii picture Sergii · Jun 26, 2017 · Viewed 41.1k times · Source

I have my own bean:

@Bean
public MyBean myBean(){...

following spring documentation to release its own resources I should specify destroyMethod. I've not found any default destroy methods called by spring in case if destroyMethod is not specified directly.

I used

@Bean(destroyMethod = "close")
public MyBean myBean(){...

but think about possibility to do not specify destroy method directly if it has value by default.


Does spring try something by default like destroy, close, release? If spring tries some methods by default to release resources - which ones?

Answer

Mark Rotteveel picture Mark Rotteveel · Jun 26, 2017

As documented in Bean.destroyMethod:

As a convenience to the user, the container will attempt to infer a destroy method against an object returned from the @Bean method. For example, given an @Bean method returning an Apache Commons DBCP BasicDataSource, the container will notice the close() method available on that object and automatically register it as the destroyMethod. This 'destroy method inference' is currently limited to detecting only public, no-arg methods named 'close' or 'shutdown'.

In other words, if you don't specify destroyMethod, but the bean has a public close() or shutdown() method, it will be automatically used as the destroy-method.

To disable this inference, use @Bean(destroyMethod = "").