Annotation Interface Destroy


@Retention(CLASS) @Target({METHOD,MODULE}) public @interface Destroy

Indicates a method that must be executed before a bean instance is destroyed when a module is stopped.

Unlike Beans with scope Bean.Strategy.SINGLETON, beans with scope Bean.Strategy.PROTOTYPE might not be destroyed and therefore destroy methods not invoked when they are created outside of a module and dereferenced before the module is stopped. As a result you should generally avoid defining destroy methods on beans with scope prototype. If you have this kind of use case, consider creating prototype beans that implement AutoCloseable, define the close() as destroy method, make sure it can be invoked twice, and create new instances as follows to make sure instance are properly destroyed:


 try (MyPrototype instance = myModuleInstance.myPrototype()) {
     ...
 }
 
Since:
1.0
Author:
Jeremy Kuhn