Spring Framework - InitializingBean

2 minuto de lectura

InitializingBean

Esta interfaz de Spring Framework te permite una vez configurado el contexto, ejecutar el método afterPropertiesSet(), y como su nombre lo dice, lo ejecuta luego de ejecutar los métodos setter del bean (post configurar el bean).

public interface InitializingBean {

  void afterPropertiesSet() throws Exception;

}

Algunas aplicaciones de esta interfaz:

  • Validar que los atributos de un Bean estén correctamente inicializados.
  • A partir de los atributos ya setteados, generar otra propiedad en tiempo de configuración. Por ejemplo, se configura el bean con dos atributos de tipo int y en tiempo de configuración quiero calcular la suma de ambos y dejarlo en otra propiedad. ¿ Qué gano con esto ? que esa propiedad no se calcula cada vez que hago el getter sino que ya esta previamente calculada.

Para el primer caso, recomiendo utilizar la clase Assert ya que provee métodos con los que puedes invalidar que el contexto Spring levante si hay errores en la configuración.

Les dejo un código de ejemplo para que le echen un vistazo (le agregué la interfaz al ejemplo del post anterior)

public class ExampleBean implements InitializingBean {

  private Integer _randomValue;

  private Integer _newValue;

  public final Integer getRandomValue() {
    return _randomValue;
  }

  public final Integer getNewValue() {
    return _newValue;
  }

  public final void setRandomValue(Integer randomValue) {
    _randomValue = randomValue;
  }

  public void afterPropertiesSet() throws Exception {
    Assert.notNull(_randomValue, "randomValue properties cannot be null");
    _newValue = _randomValue * 10;
  }

}

Voy a explicar un poco y a groso modo el como funciona esta clase desde el punto de vista de Spring:

  • Se lee la configuración asociada a la clase ExampleBean
  • Se crea la instancia de la clase ExampleBean
  • Luego vía inyección se le settean los atributos, entre ellos randomValue
  • Luego de la creación del bean ExampleBean se ejecuta el método afterPropertiesSet(), en donde se realiza una validación del randomValue (este NO puede ser nulo, de serlo, el contexto de Spring no quedara operativo), si eso pasa OK, se calculará el atributo newValue y que será randomValue multipliado por 10.
  • Finalmente y si no hay errores en el contexto de Spring, se deja la instancia del bean ExampleBean en el contexto, es decir, el valor randomValue y newValue quedan listos para ser usados.

Este proceso se realiza sólo una vez (salvo que el scope no sea singleton) y es en el momento de la creación del contexto.

Demás esta decir que esta clase/bean (ExampleBean) debe estar configurada en el archivo del contexto de Spring o vía las anotaciones (metadata) provistas para eso.

Comentar