Colecciones, reemplazo de métodos y herencia

Continuamos nuestro viaje por Spring. En este artículo hablaremos sobre más aspectos básicos que hay que conocer cuando trabajamos en cualquier programa que utilice este fantástico framework y analizaremos el modo de sobrescribir el método de una clase, mecanismo que es bastante útil cuando necesitamos alterar el comportamiento de una clase sin alterar el código de dicha clase.

 Inyectando colecciones

Podemos inyectar colecciones a una clase utilizando las etiquetas <list>, <map>, <set>, o <props>, vamos a ver un ejemplo, supongamos que tenemos la siguiente clase:

Podríamos inyectar los valores de este modo:

 

Inyectando colecciones con anotaciones

Vamos a definir como beans cada una de las colecciones, para inyectarlas posteriormente a nuestra clase por medio de anotaciones. Aquí definimos cada uno de los beans:

Modificamos el código de nuestra clase original para que reciba las colecciones:

 Es importante remarcar que estamos utilizando la anotación @Resource en lugar de @Autowired ya que esta última anotación siempre trata las listas, y mapas como conjuntos de beans con su correspondiente tipo, de modo que si defiminos, por ejemplo List<GeneradorPalabras> Spring tratará de inyectar en la propiedad anotada todos los beans que encuentre en el contexto que sean de tipo “GeneradorPalabras”.

Reemplazo de métodos

Para utilizar esta funcionalidad, debemos añadir a nuestras dependencias Maven la librería CGLIB

 Supongamos que tenemos una clase que nos saluda, y queremos reemplazar el método, para cambiar su implementación:

 Para reemplazar el método, tenemos que escribir una clase e implementar el interfaz MethodReplacer, este interfaz tiene un único método reimplement() que recibe tres argumentos, el bean original al que se quiere sobrescribir el método, una instancia del método original invocado que se va a sobrescribir, y los argumentos que recibe dicho método:

 Ya únicamente nos queda indicar en el fichero de contexto de Spring que queremos reemplazar el método. De este modo:

 Como se puede ver, se han declarado tres bean, el primero es la clase que contiene la implementación del código del método que vamos a reemplazar. El bean “saludoHola” es la clase original y el bean “saludoAdios” utiliza la misma clase que “saludoHola“, pero se indica que se va a reemplazar el método “saludar“.

Este mecanismo es muy útil cuando tenemos que modificar el comportamiento de un método de un bean y no podemos modificar el código de la clase que se utiliza.

Herencia de beans

Terminamos este artículo comentando la herencia de beans, observemos el siguiente ejemplo.

Como se puede ver, tenemos tres beans, un bean padre, en el que se han seleccionado los valores para el nombre, el apellido y la edad. Y dos beans hijos, en los que se modifica la edad y en uno de ellos además el nombre. Este mecanismo nos permite heredar la configuración del bean padre en los hijos. Los hijos como se puede ver, pueden sobrescribir los valores de la configuración que deseen. Esto es muy útil si tenemos un gran número de parámetros que se repiten una y otra vez.

Como se puede ver, hemos declarado el bean padre como “abstract”. Esto nos permite que no se pueda utilizar directamente este bean en el contexto, es decir, si realizamos lo siguiente, se produciría un error, ya que no encontraría el bean:

Podemos ejecutar el ejemplo del siguiente modo:

Donde obtendríamos el siguiente resultado:

Aquí termina este artículo, si te ha gustado no dudes en poner un comentario. Recordad que los comentarios son moderados, por lo que no se muestran inmediatamente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *