Exemple Spring InitializingBean et DisposableBean

Exemple Spring InitializingBean et DisposableBean

Dans Spring,InitializingBean etDisposableBean sont deux interfaces de marqueurs, un moyen utile pour Spring d'effectuer certaines actions lors de l'initialisation et de la destruction du bean.

  1. Pour le bean implémenté InitializingBean, il exécuteraafterPropertiesSet() après que toutes les propriétés du bean aient été définies.

  2. Pour le bean implémenté DisposableBean, il exécuteradestroy() après que le conteneur Spring ait libéré le bean.

Exemple

Voici un exemple pour vous montrer comment utiliserInitializingBeanandDisposableBean. Un bean CustomerService pour implémenter l'interface InitializingBean et DisposableBean, et possède une propriété de message.

package com.example.customer.services;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

public class CustomerService implements InitializingBean, DisposableBean
{
    String message;

    public String getMessage() {
      return message;
    }

    public void setMessage(String message) {
      this.message = message;
    }

    public void afterPropertiesSet() throws Exception {
      System.out.println("Init method after properties are set : " + message);
    }

    public void destroy() throws Exception {
      System.out.println("Spring Container is destroy! Customer clean up");
    }

}

Fichier: Spring-Customer.xml



       
        
       

Exécuter

package com.example.common;

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.example.customer.services.CustomerService;

public class App
{
    public static void main( String[] args )
    {
        ConfigurableApplicationContext context =
            new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});

        CustomerService cust = (CustomerService)context.getBean("customerService");

        System.out.println(cust);

        context.close();
    }
}

LesConfigurableApplicationContext.close() fermeront le contexte de l'application, libérant toutes les ressources et détruisant tous les beans singleton mis en cache. Il est utilisé uniquement à des fins de démonstration de la méthodedestroy() :)

Sortie

Init method after properties are set : im property message
com.example.customer.services.CustomerService@47393f
...
INFO: Destroying singletons in org.springframework.beans.factory.
support.DefaultListableBeanFactory@77158a:
defining beans [customerService]; root of factory hierarchy
Spring Container is destroy! Customer clean up

La méthode afterPropertiesSet () est appelée, une fois la propriété de message définie; tandis que la méthode destroy () est appelée après le context.close ();

Thoughts…
Je ne recommanderais pas d'utiliser l'interface InitializingBean et DisposableBean, car elle couplera étroitement votre code à Spring. Une meilleure approche devrait être de spécifier les attributsinit-method and destroy-method dans votre fichier de configuration de bean.

Télécharger le code source