1
00:00:00,180 --> 00:00:04,920
Bien, en esta clase vamos a desacoplar el operador new, es decir, crea la instancia, la idea que

2
00:00:04,920 --> 00:00:08,580
se pueda inyectar y que se puede manejar con el contenedor de Spring.

3
00:00:08,700 --> 00:00:13,860
Bueno, para eso tenemos que hacer que mi servicio esta clase sea un componente de SPRIT, es decir,

4
00:00:13,950 --> 00:00:17,880
lo tenemos que registrar en el contenedor y para eso podemos usar anotaciones.

5
00:00:17,910 --> 00:00:23,460
Por ejemplo, anotar esta clase mi servicio como un componente, por ejemplo component.

6
00:00:25,680 --> 00:00:27,090
Importamos y listo.

7
00:00:27,180 --> 00:00:31,470
Y con eso quiero registrar como un pings de sprint con el contexto por defecto.

8
00:00:31,560 --> 00:00:35,130
Es decir, este objeto se crea una sola vez en nuestra aplicación.

9
00:00:35,250 --> 00:00:41,010
Es un singleton, una sola instancia que se distribuye en nuestra aplicación y que se puede inyectar

10
00:00:41,130 --> 00:00:43,470
en otros componentes de nuestra aplicación.

11
00:00:43,590 --> 00:00:46,680
Importante que esté dentro del package base.

12
00:00:46,800 --> 00:00:52,060
Recuerden que el package base es este de acá, que es donde está la clase principal anotada con Spring

13
00:00:52,320 --> 00:00:52,870
Application.

14
00:00:53,010 --> 00:00:57,090
Esta clase 12 toda la clase de la aplicación del proyecto con Spring.

15
00:00:57,270 --> 00:01:01,560
Todas nuestras clases interfaces tienen que estar dentro de este package, incluyendo los cervix, los

16
00:01:01,560 --> 00:01:05,820
controladores nuestros Entity, los repositor y los da todo.

17
00:01:05,940 --> 00:01:12,000
Bueno, por supuesto que en su package para que quede organizado bien controllers, models, punto service,

18
00:01:12,060 --> 00:01:14,740
pero siempre dentro del principal main.

19
00:01:14,790 --> 00:01:20,930
Pero también podríamos utilizar otra anotación que es un tipo de componente, un estereotipo service.

20
00:01:21,000 --> 00:01:25,980
Por ejemplo, acá servis también la importo.

21
00:01:26,100 --> 00:01:27,510
Otra forma cualquiera de las dos.

22
00:01:27,600 --> 00:01:31,800
La única diferencia que servis aporta una semántica, pero nada más.

23
00:01:31,890 --> 00:01:38,170
Algo descriptivo de que esta clase representa un servicio en explic, es decir, una clase de lógica

24
00:01:38,170 --> 00:01:38,690
de negocio.

25
00:01:38,850 --> 00:01:41,340
Por ejemplo, control, clic para ver el detalle.

26
00:01:41,460 --> 00:01:47,610
Y acá dice, solamente indica que esta clase es una fachada de lógica, de negocio de un service, que

27
00:01:47,610 --> 00:01:49,650
es un patrón bueno, es un patrón de diseño también.

28
00:01:49,710 --> 00:01:56,220
Al final de la plataforma Java de Enterprise he dicho que hoy en día se utiliza mucho para desacoplar

29
00:01:56,230 --> 00:01:58,210
todo lo que es lógica de negocio del controlador.

30
00:01:58,320 --> 00:02:04,050
Bueno, y típicamente acá podemos tener, como había explicado Daho, uno o muchos dado, y esto puede

31
00:02:04,050 --> 00:02:07,590
interactuar dentro de los métodos service bajo una misma transacción.

32
00:02:07,680 --> 00:02:12,510
Pero bueno, son cosas que vamos a ir viendo durante el curso, pero lo importante es tener claro que

33
00:02:12,520 --> 00:02:18,720
es lógica de negocio, ya sea con bases de auto, ya sea incluso obtener datos de un archivo plano,

34
00:02:18,870 --> 00:02:25,590
de un archivo de texto, incluso también también traer datos, obtener datos mediante API rest comunicándonos

35
00:02:25,650 --> 00:02:32,160
con otros servicios, por ejemplo con Spring Cloud utilizando algún cliente http en una fachada, por

36
00:02:32,160 --> 00:02:35,220
eso un bisnes service fallada o fachada.

37
00:02:35,640 --> 00:02:39,540
Bien, voy a cerrar acá y vamos a utilizar component.

38
00:02:39,720 --> 00:02:40,920
Entonces lo deja como estaba.

39
00:02:42,200 --> 00:02:46,700
Solamente con compra, pero insisto, podemos utilizar servis porque es una clase servicio.

40
00:02:46,760 --> 00:02:50,630
Pero para partir component la diferencia es semántica, nada más.

41
00:02:50,720 --> 00:02:56,120
Es decir, no hay ninguna diferencia en términos de funcionalidad o característica que va a ocurrir

42
00:02:56,120 --> 00:02:58,880
dentro de la aplicación, no solamente algo conceptual.

43
00:02:59,030 --> 00:03:01,250
Guardamos bien, ya es componente.

44
00:03:01,760 --> 00:03:04,340
Nos vamos al index controller y acá tengo que modificar.

45
00:03:04,430 --> 00:03:11,180
Ahora esto se va desacoplar el mio y lo inyectamos utilizando la anotación Atuel.

46
00:03:13,160 --> 00:03:18,920
Tal cual, ÂTu Witten para inyectar y esta notación no significa nada más, solamente para inyectar

47
00:03:18,980 --> 00:03:21,800
un objeto que está registrado en el contenedor de Spring.

48
00:03:21,920 --> 00:03:22,400
Nada más.

49
00:03:22,520 --> 00:03:28,760
Es decir, busca algún objeto que esté guardado en el contenedor de Spring que sea de este tipo dato

50
00:03:29,180 --> 00:03:30,270
del tipo mi servicio.

51
00:03:30,520 --> 00:03:32,660
Entonces, cuando lo encuentra, lo inyecta.

52
00:03:33,080 --> 00:03:38,640
Ahora, si no lo encuentra, lanzó un error que no está definido o no está registrado en el contenedor

53
00:03:38,640 --> 00:03:39,490
de Spring Break.

54
00:03:39,620 --> 00:03:45,620
Guardamos ya tengo lantado el proyecto de la clase anterior, así que si no lo tienen, levantan con

55
00:03:45,620 --> 00:03:46,400
click derecho.

56
00:03:46,460 --> 00:03:50,360
Ranas Springwood App y si lo tienen lantado no importa porque se actualiza.

57
00:03:50,360 --> 00:03:55,070
Solo recuerden que una vez que se levanta el proyecto no se tiene que volver a levantar porque estaría

58
00:03:55,070 --> 00:03:57,630
ocupado el puerto 80 80 y lanzaría un error.

59
00:03:57,800 --> 00:04:01,550
Vamos a navegador, probamos ejecutando un proceso importante, se fijan?

60
00:04:01,640 --> 00:04:02,900
Funciona exactamente igual.

61
00:04:03,030 --> 00:04:07,490
Bien, entonces el único cambio que hicimos fue inyectar desde Spring utilizando el principio Hollywood.

62
00:04:07,520 --> 00:04:10,150
Recuerden, no nos llames nosotros, te llamaremos nosotros.

63
00:04:10,160 --> 00:04:15,410
30 Quitaremos esa instancia, pero todavía está acoplado porque mi servicio es una clase concreta y

64
00:04:15,410 --> 00:04:16,220
podría cambiar.

65
00:04:16,310 --> 00:04:22,580
Hoy por hoy lo podríamos tener, por ejemplo, implementado alguna operación o consulta con JDBC y necesitamos

66
00:04:22,580 --> 00:04:28,600
emigrar a Internet con JPA, o bien ir a buscar los datos a otro servicio utilizando API REST.

67
00:04:28,730 --> 00:04:29,990
Entonces la implementación cambia.

68
00:04:30,080 --> 00:04:35,630
El método, por ejemplo, operación tiene el mismo nombre, se llama igual, pero lo que cambia es lo

69
00:04:35,630 --> 00:04:40,460
que sucede dentro, el método bueno, y esto es el principio de encapsulamiento.

70
00:04:40,520 --> 00:04:46,160
Todo el código que tenemos implementado está encapsulado dentro de método, no es visible, es su implementación

71
00:04:46,160 --> 00:04:48,250
que podría cambiar de una clase a otra.

72
00:04:48,360 --> 00:04:54,020
Entonces, si tenemos otra clase concreta también que tiene este método operación mismo nombre, pero

73
00:04:54,110 --> 00:04:55,700
lo implementa de otra forma.

74
00:04:55,790 --> 00:05:01,370
Bueno, también tenemos que modificar acá el tipo de dato porque sigue estando acoplado a este nombre

75
00:05:01,370 --> 00:05:02,270
de clase concreta.

76
00:05:02,360 --> 00:05:07,460
Entonces la idea es usar tipos genéricos, por ejemplo, clases abstracta o interfaces.

77
00:05:07,550 --> 00:05:09,040
Bueno, por lo general interfaces.

78
00:05:09,140 --> 00:05:14,330
Entonces, a partir de la siguiente clase vamos a implementar interfaces y vamos a cambiar acá el tipo

79
00:05:14,390 --> 00:05:20,420
en la inyección, en vez de inyectar por el tipo concreto, vamos a inyectar por la interfaz y así desacoplar

80
00:05:20,450 --> 00:05:23,150
completamente cualquier implementación concreta.

81
00:05:23,210 --> 00:05:28,850
Y de hecho, no tendríamos que estar modificando los controladores que estén utilizando ese componente

82
00:05:28,910 --> 00:05:31,610
cuando queremos cambiar una implementación a otra.

83
00:05:31,700 --> 00:05:34,220
El tipo de dato, ya que genérico es una interfaz.

84
00:05:34,310 --> 00:05:37,130
Lo podría implementar más de una clase concreta.

85
00:05:37,170 --> 00:05:40,540
Pero bien, todos esos detalles lo vemos a partir de la siguiente clase.
