Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

unidades:10_servidor:04_inyecciondependencias [2014/08/31 00:10]
admin
unidades:10_servidor:04_inyecciondependencias [2014/09/03 11:56] (actual)
admin [La solución]
Línea 2: Línea 2:
 La inyección de dependencias (en inglés Dependency Injection, DI) es un patrón de diseño sencillo de usar aunque quizás resulte algo muy novedoso para algunas personas. ​ La inyección de dependencias (en inglés Dependency Injection, DI) es un patrón de diseño sencillo de usar aunque quizás resulte algo muy novedoso para algunas personas. ​
  
-La DI intenta resolver el problema que hay en el código del ejemplo de JSON de hace 2 temas:+ 
 +===== El problema ===== 
 +La inyección de dependencias ​intenta resolver el problema que hay en el código del ejemplo de JSON de hace 2 temas:
  
 <sxh java;​highlight:​ [5]> <sxh java;​highlight:​ [5]>
Línea 33: Línea 35:
 El problema es que tenemos dentro del código la implementación que usamos del interfaz y si usamos el interfaz para no saber nada sobre su implementación es un sin sentido que tengamos en el propio código una referencia a la implementación. Además is quisiéramos cambiar la implementación deberíamos ir por todo el código buscando donde se usa para cambiarlo. El problema es que tenemos dentro del código la implementación que usamos del interfaz y si usamos el interfaz para no saber nada sobre su implementación es un sin sentido que tengamos en el propio código una referencia a la implementación. Además is quisiéramos cambiar la implementación deberíamos ir por todo el código buscando donde se usa para cambiarlo.
  
-La solución a todo ésto es la **Inyección de Dependencias** que evita que nuestro código tenga referencia ​a las implementaciones que usamos.+===== La solución ===== 
 +La solución a todo ésto es la **Inyección de Dependencias** que evita que nuestro código tenga referencias ​a las implementaciones que usamos.
  
-Vamos a modificar el controlador del tema anterior de forma que usemos ''​JsonTransformer'':​+Vamos a modificar el controlador ​''​UsuarioController '' ​del tema anterior de forma que usemos ''​JsonTransformer'':​
  
-<sxh java;​highlight:​ [6]>+<sxh java;​highlight:​ [6];​title:​UsuarioController.java>
 @Controller @Controller
 public class UsuarioController { public class UsuarioController {
Línea 52: Línea 55:
 } }
 </​sxh>​ </​sxh>​
-Vemoa que ahora el controlador en vez de mostrar en la página web el texto "Hola mundo" retornara el JSON:+Vemos que ahora el controlador en vez de mostrar en la página web el texto "Hola mundo" retornara el JSON:
   {"​nombre":"​Alberto Tortosa","​email":"​alberto_tortosa@gmail.com","​edad":​91}   {"​nombre":"​Alberto Tortosa","​email":"​alberto_tortosa@gmail.com","​edad":​91}
  
Línea 77: Línea 80:
 </​beans>​ </​beans>​
 </​sxh>​ </​sxh>​
-  Línea 12: Hemos añadido la clase ''​es.cursoangularjs.inyecciondependencias.json.JsonTransformerImplJackson''​ diciendo que ahora puede ser inyectada si solicitan una implementación del interfaz ''​JsonTransformer''​+  ​Línea 12: Hemos añadido la clase ''​es.cursoangularjs.inyecciondependencias.json.JsonTransformerImplJackson''​ diciendo que ahora puede ser inyectada si solicitan una implementación del interfaz ''​JsonTransformer''​
   ​   ​
 ¿Como sabe Spring que esa clase se debe inyectar si solicitan el interfaz ''​JsonTransformer''?​ Muy sencillo porque mira la clase y ve que implementa ese interfaz. ¿Como sabe Spring que esa clase se debe inyectar si solicitan el interfaz ''​JsonTransformer''?​ Muy sencillo porque mira la clase y ve que implementa ese interfaz.
Línea 99: Línea 102:
 } }
 </​sxh>​ </​sxh>​
-  ​+  ​* Línea 5: Esta línea le dice a Spring que debe buscar una implementación del interfaz que hay a continuación y asignarle una instancia a la propiedad. 
 +  * Línea 6: Declaramos ahora la propiedad privada ''​jsonTransformer''​ pero no indicamos el objeto que lo implementa. Eso lo inyectará automáticamente Spring 
 + 
 +Es decir que ahora la configuración sobre de implementaciones debemos usar está centralizada en el fichero ''​applicationContext.xml''​ y el resto de la aplicación gracias a la anotación ''​@Autowired''​ permite que se le inyecte la implementación que está definida en el fichero. Es decir que inyectar significa simplemente asignar un objeto a una propiedad pero sin que la clase a la que se le inyecta el objeto sepa de que clase es. 
 + 
 +<note important>​ 
 +Una cosa importante a tener en cuenta es que spring solo va a crear un única instancia de objeto a inyectar en toda la aplicación por lo que hay que tener cuidado con mantener un estado en el objeto o controlar el acceso de varias threads a la vez. 
 +</​note>​ 
 +===== Ejemplo ===== 
 +El ejemplo de esta unidad es exactamente lo que acabamos de contar pero es un nuevo proyecto llamado "​inyecciondependencias"​. 
 +Lo único que debes recordar es que se han añadido también las librerías de Jackson y Spring. 
 + 
 +<​note>​ 
 +Este ejemplo se encuentra en  git en [[https://​github.com/​logongas/​cursoangularjs/​tree/​master/​inyecciondependencias]] 
 +</​note>​ 
 + 
unidades/10_servidor/04_inyecciondependencias.1409436620.txt.gz · Última modificación: 2014/08/31 00:10 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0