J'ai mon propre haricot:
@Bean
public MyBean myBean(){...
après la documentation du printemps pour publier ses propres ressources, je devrais spécifier destroyMethod
. Je n'ai trouvé aucune méthode de destruction par défaut appelée par spring au cas où destroyMethod
ne soit pas spécifié directement.
J'ai utilisé
@Bean(destroyMethod = "close")
public MyBean myBean(){...
mais pensez à la possibilité de ne pas spécifier directement la méthode destroy si elle a une valeur par défaut.
Est-ce que spring essaie par défaut quelque chose comme destroy
, close
, release
? Si spring essaie certaines méthodes par défaut pour libérer des ressources - lesquelles?
Comme indiqué dans Bean.destroyMethod
:
Pour plus de commodité, le conteneur tentera de déduire un Méthode destroy contre un objet renvoyé par la méthode
@Bean
. Pour Par exemple, étant donné une méthode@Bean
renvoyant un DBCP Apache CommonsBasicDataSource
, le conteneur notera la méthodeclose()
disponible sur cet objet et l'enregistrer automatiquement en tant quedestroyMethod
. Cette 'inférence de méthode de destruction' est actuellement limitée pour détecter uniquement les méthodes publiques, sans argument, nommées 'close' ou 'shutdown'.
En d'autres termes, si vous ne spécifiez pas destroyMethod
, mais que le bean a une méthode publique close()
ou shutdown()
, il sera automatiquement utilisé comme méthode de destruction.
Pour désactiver cette inférence, utilisez @Bean(destroyMethod = "")
.
L’interface org.springframework.beans.factory.DisposableBean spécifie une seule méthode -
void destroy() throws Exception;
Il suffit de le mettre en œuvre -
public class ExampleBean implements DisposableBean {
public void destroy() {
// do some destruction work
}
}
pour une configuration basée sur XML
<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/>
et dans le haricot
public class ExampleBean {
public void destroy() {
// do some destruction work
}
}
ou annoter avec @PreDestroy
Vous pouvez implémenter une méthode qui sera exécutée avant de la détruire et l'annoter avec @PreDestroy
@PreDestroy
public void methodName() {
//Your code..
}
Vous pouvez étendre DisposableBeanAdapter
class. L’une des méthodes fournies est la méthode destroy
appelée par Spring. De cette façon, vous n’avez pas à fournir d’implémentation alors que cela est nécessaire lorsque vous utilisez l’interface DisposableBean
.