2017-06-26 1 views
2

J'ai mon propre haricot:Noyau de ressort. Par défaut @Bean méthode destroy

@Bean 
public MyBean myBean(){... 

suivant la documentation du printemps pour libérer ses propres ressources que je devrais préciser destroyMethod. Je n'ai trouvé aucune méthode de destruction par défaut appelée par spring au cas où destroyMethod n'est pas spécifié directement.

J'utilisé

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

mais pensez à la possibilité de ne pas préciser la méthode de détruire directement si elle a une valeur par défaut.


Est-ce que quelque chose essayer de printemps par défaut comme destroy, close, release? Si le printemps essaie certaines méthodes par défaut pour libérer des ressources - lesquelles?

+0

Je pense que non. Ce serait très flou, vous avez besoin d'une annotation comme '@ PreDestroy' ou' @Bean (destroyMethod = "...") ', ou implémentez' DisposableBean'. – rxn1d

Répondre

4

Comme indiqué dans Bean.destroyMethod:

En tant que commodité pour l'utilisateur , le conteneur tentera de déduire une méthode de destruction de contre un objet retourné m la méthode @Bean. Pour exemple, étant donné une méthode @Bean renvoyant un Apache Commons DBCP BasicDataSource, le récipient remarquera la méthode close() disponible sur cet objet et d'enregistrer automatiquement comme destroyMethod. 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 le haricot a une méthode close() ou shutdown() public, il sera automatiquement utilisé comme méthode de détruire.

Pour désactiver cette inférence, utilisez @Bean(destroyMethod = "").

+0

Je peux le voir aussi maintenant, merci. J'ai rouge cette partie quelques fois mais manqué, désolé. – Sergii

1

Vous pouvez étendre la classe DisposableBeanAdapter. Une des méthodes qu'il fournit est la méthode destroy appelée par Spring. De cette façon, vous n'avez pas besoin de fournir une implémentation lorsque cela est nécessaire lorsque vous utilisez l'interface DisposableBean.

1

Vous pouvez mettre en œuvre une méthode qui sera exécutée avant de détruire et annoter avec @PreDestroy

@PreDestroy 
public void methodName() { 
    //Your code.. 
} 
2

L'interface org.springframework.beans.factory.DisposableBean spécifie une méthode unique -

void destroy() throws Exception; 

Il suffit de l'implémenter -

public class ExampleBean implements DisposableBean { 
    public void destroy() { 
     // do some destruction work 
    } 
} 

pour la configuration XML-

<bean id = "exampleBean" class = "examples.ExampleBean" destroy-method = "destroy"/> 

et la fève

public class ExampleBean { 
    public void destroy() { 
     // do some destruction work 
    } 
} 

ou annoter avec @PreDestroy