Bien, en esta clase vamos a desacoplar el operador new, es decir, crea la instancia, la idea que
se pueda inyectar y que se puede manejar con el contenedor de Spring.
Bueno, para eso tenemos que hacer que mi servicio esta clase sea un componente de SPRIT, es decir,
lo tenemos que registrar en el contenedor y para eso podemos usar anotaciones.
Por ejemplo, anotar esta clase mi servicio como un componente, por ejemplo component.
Importamos y listo.
Y con eso quiero registrar como un pings de sprint con el contexto por defecto.
Es decir, este objeto se crea una sola vez en nuestra aplicación.
Es un singleton, una sola instancia que se distribuye en nuestra aplicación y que se puede inyectar
en otros componentes de nuestra aplicación.
Importante que esté dentro del package base.
Recuerden que el package base es este de acá, que es donde está la clase principal anotada con Spring
Application.
Esta clase 12 toda la clase de la aplicación del proyecto con Spring.
Todas nuestras clases interfaces tienen que estar dentro de este package, incluyendo los cervix, los
controladores nuestros Entity, los repositor y los da todo.
Bueno, por supuesto que en su package para que quede organizado bien controllers, models, punto service,
pero siempre dentro del principal main.
Pero también podríamos utilizar otra anotación que es un tipo de componente, un estereotipo service.
Por ejemplo, acá servis también la importo.
Otra forma cualquiera de las dos.
La única diferencia que servis aporta una semántica, pero nada más.
Algo descriptivo de que esta clase representa un servicio en explic, es decir, una clase de lógica
de negocio.
Por ejemplo, control, clic para ver el detalle.
Y acá dice, solamente indica que esta clase es una fachada de lógica, de negocio de un service, que
es un patrón bueno, es un patrón de diseño también.
Al final de la plataforma Java de Enterprise he dicho que hoy en día se utiliza mucho para desacoplar
todo lo que es lógica de negocio del controlador.
Bueno, y típicamente acá podemos tener, como había explicado Daho, uno o muchos dado, y esto puede
interactuar dentro de los métodos service bajo una misma transacción.
Pero bueno, son cosas que vamos a ir viendo durante el curso, pero lo importante es tener claro que
es lógica de negocio, ya sea con bases de auto, ya sea incluso obtener datos de un archivo plano,
de un archivo de texto, incluso también también traer datos, obtener datos mediante API rest comunicándonos
con otros servicios, por ejemplo con Spring Cloud utilizando algún cliente http en una fachada, por
eso un bisnes service fallada o fachada.
Bien, voy a cerrar acá y vamos a utilizar component.
Entonces lo deja como estaba.
Solamente con compra, pero insisto, podemos utilizar servis porque es una clase servicio.
Pero para partir component la diferencia es semántica, nada más.
Es decir, no hay ninguna diferencia en términos de funcionalidad o característica que va a ocurrir
dentro de la aplicación, no solamente algo conceptual.
Guardamos bien, ya es componente.
Nos vamos al index controller y acá tengo que modificar.
Ahora esto se va desacoplar el mio y lo inyectamos utilizando la anotación Atuel.
Tal cual, ÂTu Witten para inyectar y esta notación no significa nada más, solamente para inyectar
un objeto que está registrado en el contenedor de Spring.
Nada más.
Es decir, busca algún objeto que esté guardado en el contenedor de Spring que sea de este tipo dato
del tipo mi servicio.
Entonces, cuando lo encuentra, lo inyecta.
Ahora, si no lo encuentra, lanzó un error que no está definido o no está registrado en el contenedor
de Spring Break.
Guardamos ya tengo lantado el proyecto de la clase anterior, así que si no lo tienen, levantan con
click derecho.
Ranas Springwood App y si lo tienen lantado no importa porque se actualiza.
Solo recuerden que una vez que se levanta el proyecto no se tiene que volver a levantar porque estaría
ocupado el puerto 80 80 y lanzaría un error.
Vamos a navegador, probamos ejecutando un proceso importante, se fijan?
Funciona exactamente igual.
Bien, entonces el único cambio que hicimos fue inyectar desde Spring utilizando el principio Hollywood.
Recuerden, no nos llames nosotros, te llamaremos nosotros.
30 Quitaremos esa instancia, pero todavía está acoplado porque mi servicio es una clase concreta y
podría cambiar.
Hoy por hoy lo podríamos tener, por ejemplo, implementado alguna operación o consulta con JDBC y necesitamos
emigrar a Internet con JPA, o bien ir a buscar los datos a otro servicio utilizando API REST.
Entonces la implementación cambia.
El método, por ejemplo, operación tiene el mismo nombre, se llama igual, pero lo que cambia es lo
que sucede dentro, el método bueno, y esto es el principio de encapsulamiento.
Todo el código que tenemos implementado está encapsulado dentro de método, no es visible, es su implementación
que podría cambiar de una clase a otra.
Entonces, si tenemos otra clase concreta también que tiene este método operación mismo nombre, pero
lo implementa de otra forma.
Bueno, también tenemos que modificar acá el tipo de dato porque sigue estando acoplado a este nombre
de clase concreta.
Entonces la idea es usar tipos genéricos, por ejemplo, clases abstracta o interfaces.
Bueno, por lo general interfaces.
Entonces, a partir de la siguiente clase vamos a implementar interfaces y vamos a cambiar acá el tipo
en la inyección, en vez de inyectar por el tipo concreto, vamos a inyectar por la interfaz y así desacoplar
completamente cualquier implementación concreta.
Y de hecho, no tendríamos que estar modificando los controladores que estén utilizando ese componente
cuando queremos cambiar una implementación a otra.
El tipo de dato, ya que genérico es una interfaz.
Lo podría implementar más de una clase concreta.
Pero bien, todos esos detalles lo vemos a partir de la siguiente clase.