Muestra las diferencias entre dos versiones de la página.
patrones:di [2014/09/09 07:57] admin |
patrones:di [2014/09/09 09:24] (actual) admin [Inyección de Dependencias] |
||
---|---|---|---|
Línea 16: | Línea 16: | ||
Veamos el siguiente código Java: | Veamos el siguiente código Java: | ||
- | <code java> | + | <sxh java> |
public class PruebaIoC { | public class PruebaIoC { | ||
- | SessionFactory sessionFactory=HibernateUtil.getSessionFactory(); | + | ProfesorDAO profesorDAO=new ProfesorDAOImplHibernate(); |
- | ProfesorDAO profesorDAO=new ProfesorDAOImplHibernate(); | + | SessionFactory sessionFactory=HibernateUtil.getSessionFactory(); |
} | } | ||
- | </code> | + | </sxh> |
- | + | * Línea 1: Para crear el objeto del interfaz ''ProfesorDAO'' usamos la orden ''new'' e indicamos el nombre de la clase que implementa el interfaz que es ''ProfesorDAOImplHibernate'' | |
- | Hasta ahora, si nuestra clase ''PruebaIoC'' necesitaba un objeto, se llamaba a un método que le proveía dicho objeto o simplemente se creaba con ''new'', tal y como vemos en las líneas anteriores. | + | * Línea 2: Para crear el objeto del interfaz ''SessionFactory'' usamos el método estático ''getSessionFactory()'' de la clase ''HibernateUtil''. |
+ | ¿Cual son los problemas de estas 2 líneas? | ||
Obviamente, la línea ''ProfesorDAO profesorDAO=new ProfesorDAOImplHibernate()'' es bastante lamentable ya que estamos atando el código de ''PruebaIoC'' a una implementación concreta del interfaz ''ProfesorDAO''. Éso se debe evitar a toda costa , aunque una solución es crear otra clase de factoría del interfaz ''ProfesorDAO''. | Obviamente, la línea ''ProfesorDAO profesorDAO=new ProfesorDAOImplHibernate()'' es bastante lamentable ya que estamos atando el código de ''PruebaIoC'' a una implementación concreta del interfaz ''ProfesorDAO''. Éso se debe evitar a toda costa , aunque una solución es crear otra clase de factoría del interfaz ''ProfesorDAO''. | ||
Línea 42: | Línea 43: | ||
Vemos cómo ahora sólo se declaran las 2 propiedades. El framework de Inyección de Dependencias que usemos, automáticamente asignará los valores a las 2 propiedades sin que la clase ''PruebaIoC'' sepa de dónde han salido. Es decir, que hemos eliminado las dependencias a ''HibernateUtil'' y hemos evitado incluir en el código la implementación concreta del interfaz ''ProfesorDAO''. | Vemos cómo ahora sólo se declaran las 2 propiedades. El framework de Inyección de Dependencias que usemos, automáticamente asignará los valores a las 2 propiedades sin que la clase ''PruebaIoC'' sepa de dónde han salido. Es decir, que hemos eliminado las dependencias a ''HibernateUtil'' y hemos evitado incluir en el código la implementación concreta del interfaz ''ProfesorDAO''. | ||
+ | |||
<note tip> | <note tip> |