Reputation: 7543
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?
Upvotes: 45
Views: 87787
Reputation: 3945
You can implement a method which will be executed before destroying and annotate it with @PreDestroy
@PreDestroy
public void methodName() {
//Your code..
}
Upvotes: 22
Reputation: 108938
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 DBCPBasicDataSource
, the container will notice theclose()
method available on that object and automatically register it as thedestroyMethod
. 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 = "")
.
Upvotes: 83
Reputation: 5911
You can extend DisposableBeanAdapter
class. One of the methods it provides is the destroy
method being called by Spring. This way you don't have to provide any implementation while it is required when you're using DisposableBean
interface.
Upvotes: 4
Reputation: 743
The org.springframework.beans.factory.DisposableBean interface specifies a single method −
void destroy() throws Exception;
Simply implement it −
public class ExampleBean implements DisposableBean {
public void destroy() {
// do some destruction work
}
}
for XML-based configuration
<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>
and in the bean
public class ExampleBean {
public void destroy() {
// do some destruction work
}
}
or annotate with @PreDestroy
Upvotes: 10