jueves, 25 de agosto de 2011

Spring MVC III - IoC (Inyección de dependencias)

En esta 3er entrega de Spring MVC vamos a mostrar un ejemplo muy muy simple de la IoC.
Para poder leer este tutorial es necesario haber leído anteriormente la 2da parte de este tutorial http://java-all-frameworks.blogspot.com/2011/08/spring-mvc-ii-form-processing.html

SpringHelloWorld-servlet.xml


<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="brandManager" class="springmvc.manager.BrandManager"/>

<bean id="carManager" class="springmvc.manager.CarManager"/>

<bean name="/hello_world.html" class="springmvc.web.HelloWorldController"/>

<bean name="/car_list.html" class="springmvc.web.CarListController">
<!-- IoC CarManager -->
<property name="cm" ref="carManager"/>
</bean>


<bean name="/new_car.html" class="springmvc.web.CarNewController">
<property name="commandClass" value="springmvc.model.Car" />
<property name="formView" value="car_new" />
<property name="successView" value="car_list.html"/>
<property name="validator">
        <bean class="springmvc.validator.CarValidator"/>
                </property>
                <!-- IoC BrandManager -->
                <property name="bm" ref="brandManager"/>
</bean>


<bean id="viewResolver" class="org.springframework.web.servlet.view.
                                   InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.
                                   servlet.view.JstlView" />
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>


</beans>


En rojo vemos como se modifica el xml y se agrega la inyeccion de dependencias. Es decir, a cada controller vamos a inyectarle cada manager para poder utilizarlos sin la necesidad de hacer new xxx().

CarListController.java

public class CarListController implements Controller {

// IoC 
private CarManager cm;
       
        ...
        ...
        ...

        public CarManager getCm() {
return cm;
}

public void setCm(CarManager cm) {
this.cm = cm;
}

}

CarNewController.java


public class CarNewController  extends SimpleFormController{
List<Brand> brandList = new ArrayList<Brand>();
List<Car> carList = new ArrayList<Car>();
// IoC 
private BrandManager bm;

        ...
        ...
        ...



        public BrandManager getBm() {
return bm;
}

public void setBm(BrandManager bm) {
this.bm = bm;
}
}

Esta forma de inyección permite que la creación de los managers sea del tipo Singleton lo cual evita tener múltiples instancias del manager

Descargar el codigo completo

Por favor, haga clic aqui para empezar la descarga

No hay comentarios:

Publicar un comentario