Como ya he mencionado en el post anterior, Spring permite inyectar métodos de dos maneras, la primera haciendo un una clase que implemente MethodReplace y la segunda es por Getter Injection.
Esta se diferencia de la primera ya que no es necesario implementar ninguna clase.
Como su nombre lo indica hace un get del ApplicationContext y devuelve ese bean, este método de inyección se usa normalmente cuando tenemos un método abstracto y no queremos hacer una clase hija que implemente el método. Para esto declaramos la siguiente clase
package com.blogspot.snakepitit.beans
public class Musician {
private String name;
public abstract Instrument getInstrument();
public void setName(String name) {
this.name = name;
}
}
package com.blogspot.snakepitit.instrumentimpl
import com.blogspot.snakepitit.interfaces
public class Guitar implements Instrument {
public void perform() {
System.out.println("Gibson Rulezzzzz");
}
}
Definimos la clase Musician la cual tiene una propiedad name y un método abstracto que devuelve Instrument que sería la interfaz que deben implementar todos los instrumentos, la cual obliga a implementar un metodo perform().
En este caso podemos usar Method Replacer pero implica escribir una nueva clase lo cual podríamos usar el tiempo en escribir la implementación de una clase hija o
hacer getter injection, para esto debemos definirlo lo siguiente en el ApplicationContext:
<bean id="slash" class="com.blogspot.snakepitit.beans.Musician">
<property name="name" value="Saul Hudson" />
<lookup-method name="getInstrument" bean="guitar" />
</bean>
<bean id="guitar" class="com.blogspot.snakepitit.instrumentimpl.Guitar" scope="prototype" />
Vemos que aparece lookup-method que sirve para decirle que la implementación de nuestro método que le indicamos en name (getInstrument) se hará de la siguiente manera :
ApplicationContext ctx = new ClassPathXmlApplicationContext("com/blogspot/snakepitit/app-context.xml");
return (Instrument) ctx.getBean("guitar");
y por otro lado vemos que tiene scope="prototype" esto se debe a que si es como un setter injection siempre se la da la misma instancia y lo que queremos es todo lo contrario, que por cada llamado devuelva una instancia nueva de la clase Guitar
Suscribirse a:
Enviar comentarios (Atom)
che, no entiendo ni goma de esto.
ResponderEliminar