1
00:00:00,330 --> 00:00:05,340
Perfecto, ahora nos vamos a ir un poco más a lo conceptual, que es la inyección de dependencia.

2
00:00:05,490 --> 00:00:12,390
Es bastante simple, significa proveer o suministrar a un objeto, una referencia, una instancia de

3
00:00:12,390 --> 00:00:15,810
otro objeto, quien necesite según la relación.

4
00:00:15,930 --> 00:00:20,490
Esta instancia se lo va a pasar en un atributo, se lo inyecta.

5
00:00:20,610 --> 00:00:26,790
Resuelve el problema de reutilización y modularidad entre los componentes de nuestra aplicación.

6
00:00:26,910 --> 00:00:27,180
Ahora.

7
00:00:27,270 --> 00:00:29,670
E importante de que estos componentes.

8
00:00:29,730 --> 00:00:30,690
Estos dos objetos.

9
00:00:30,810 --> 00:00:34,530
El objeto al que le estamos inyectando y el objeto inyectado.

10
00:00:34,650 --> 00:00:38,280
Ambos tienen que estar manejados por el contenedor.

11
00:00:38,400 --> 00:00:39,900
Tienen que estar registrados.

12
00:00:39,990 --> 00:00:40,950
Como ya hemos visto.

13
00:00:40,980 --> 00:00:41,730
Por ejemplo.

14
00:00:41,790 --> 00:00:44,580
Una forma utilizando la notación component.

15
00:00:45,120 --> 00:00:51,300
Cómo funciona en este patrón tiene un contenedor y también maneja un patrón por debajo que se llama

16
00:00:51,300 --> 00:00:58,560
Service Locator que se encarga de registrar y también de obtener localizar estos objetos que están guardados

17
00:00:58,560 --> 00:01:00,240
dentro de este gran contenedor.

18
00:01:00,390 --> 00:01:06,750
El contenedor se encarga de manejar estas instancias y dependencias de este componente mediante la relación

19
00:01:06,840 --> 00:01:07,740
e inyección de dependencia.

20
00:01:07,830 --> 00:01:11,550
Maneja también la creación de estos objetos cuando se registra.

21
00:01:11,610 --> 00:01:17,310
Por eso es importante tener siempre un constructor sin parámetros, ya que por defecto el contenedor

22
00:01:17,400 --> 00:01:21,540
va a crear estas instancias con el operador new, pero el texto por debajo.

23
00:01:21,750 --> 00:01:22,830
Eso no lo vemos.

24
00:01:23,010 --> 00:01:29,970
La inyección de dependencia se opone, va en contra oposición de crear los objetos de forma explícita

25
00:01:30,090 --> 00:01:33,750
con el opera horneo siempre en favor a la inyección de dependencia.

26
00:01:33,900 --> 00:01:37,170
Es mucho mejor evitar en lo posible el operador new.

27
00:01:37,200 --> 00:01:40,950
Bueno, no siempre, porque muchas veces tenemos que crear nosotros nuestros objetos.

28
00:01:41,040 --> 00:01:46,260
Por ejemplo, nuestros entity, cosas que vamos a ver después, pero típicamente en la clase de servicios,

29
00:01:46,350 --> 00:01:50,400
los datos o cualquier otro objeto que queramos que lo maneje el contenedor.

30
00:01:50,490 --> 00:01:56,070
Estos se manejan de forma automática, se crean, se distancian, se inyectan, se relacionan y todo

31
00:01:56,250 --> 00:01:58,140
a través de este gran contenedor.

32
00:01:58,290 --> 00:02:06,060
Esto permite un bajo acoplamiento entre los componentes, entre los objetos y se plasma en Spring mediante

33
00:02:06,060 --> 00:02:07,390
la anotación Hatuey.

34
00:02:07,530 --> 00:02:14,370
Como también ya hemos visto entonces, para resumir, permite a una clase o componente a obtener desde

35
00:02:14,370 --> 00:02:20,850
el contenedor una referencia de otra instancia de un componente V, haciendo que este contenedor de

36
00:02:20,850 --> 00:02:28,970
Spring inyecte o suministre el componente B en algún atributo de la clase o componente a principios.

37
00:02:29,010 --> 00:02:35,010
Hollywood, tal como había mencionado, no nos llames nosotros te llamaremos nosotros te vamos a suministrar

38
00:02:35,100 --> 00:02:36,690
a inyectar esta instancia.

39
00:02:36,840 --> 00:02:42,720
Acá tenemos un esquema el contenedor de Spring lo tenemos por acá, componentes manejados por el framework

40
00:02:42,870 --> 00:02:49,110
y acá tenemos componentes, por ejemplo controlador, cervix y los dados, por ejemplo controlador por

41
00:02:49,110 --> 00:02:49,620
detrás de escena.

42
00:02:49,650 --> 00:02:55,320
También está anotado con component, pero utiliza el estereotipo controller, mientras que servis también

43
00:02:55,320 --> 00:03:02,860
hay un componente, pero utiliza el estereotipo servis la anotación servis y dado la anotación repository.

44
00:03:02,940 --> 00:03:05,130
Pero todos ellos son componentes Spring.

45
00:03:05,250 --> 00:03:11,880
Cada uno tiene su distintas tareas que hacer, distintas funciones, pero todos se crean y son manejados

46
00:03:11,970 --> 00:03:18,390
por el contenedor, se guardan acá y por ejemplo un dado se va a inyectar en la clase servis, mientras

47
00:03:18,390 --> 00:03:22,570
que la clase servis o esta instancia de un servicio se inyecta en el controlador.

48
00:03:22,710 --> 00:03:26,820
Recordemos que los cervix por general prestan servicio de lógica de negocio.

49
00:03:26,910 --> 00:03:29,460
Es una fachada para acceder a nuestros datos.

50
00:03:29,580 --> 00:03:36,780
Un service puede tener varios atributos de muchos daho y cada objeto dado o de acceso a datos va a realizar

51
00:03:36,780 --> 00:03:42,900
operaciones, tintas, consultas Insert, Abdi y Delight, en fin, cualquier tipo de tarea o proceso,

52
00:03:43,050 --> 00:03:49,020
incluso un service dentro de un método, puede interactuar con varias operaciones de distintos datos

53
00:03:49,110 --> 00:03:52,410
a distintas tablas y todo bajo una misma transacción.

54
00:03:52,500 --> 00:03:58,530
Por otro lado, tenemos Internet, la clase Identity y Vernet, también mediante el Identity Manager.

55
00:03:58,620 --> 00:04:01,920
También se maneja con componentes Spring y el manager.

56
00:04:01,980 --> 00:04:05,940
Se puede inyectar en las clases repositorios o dado.

57
00:04:06,120 --> 00:04:12,150
También tenemos la presentación Lavista, que finalmente es donde se muestra el resultado al cliente,

58
00:04:12,270 --> 00:04:12,840
al usuario.

59
00:04:12,960 --> 00:04:18,630
La respuesta típicamente son los objetos del modelo, que es un resultado, por ejemplo, de alguna

60
00:04:18,630 --> 00:04:21,910
consulta o operación que se lleva a cabo en la lógica de negocio.

61
00:04:22,080 --> 00:04:27,870
En el servis o en los datos, el controlador obtiene esta clase de modelo y se la pasa a la vista.

62
00:04:28,170 --> 00:04:32,310
Repecto auto willet, anotación que permite inyectar.

63
00:04:32,400 --> 00:04:36,150
especificÃ que se inyectará un objeto de Spring.

64
00:04:36,300 --> 00:04:42,020
Hablemos un objeto Spring, ya sea un bean o componente, son dos nombre que se le suelen dar y se inyecta

65
00:04:42,030 --> 00:04:44,430
este objeto en un atributo de otro objeto.

66
00:04:44,550 --> 00:04:50,610
En otras palabras, es para inyectar un beans, un objeto de Spring en el componente actual en alguna

67
00:04:50,610 --> 00:04:56,370
clase anotada con Component Oko Controller o con servis o con repository manejada por Spring.

68
00:04:56,520 --> 00:04:59,820
Por defecto, la inyección falla si no encuentra un campo.

69
00:04:59,950 --> 00:05:05,570
Didato disponible, por ejemplo, si queremos inyectar un tipo, una clase que no está guardada, que

70
00:05:05,570 --> 00:05:10,610
no está registrada en el contenedor, es decir, que no está anotada con component o con cualquiera

71
00:05:10,610 --> 00:05:11,190
de las otras.

72
00:05:11,240 --> 00:05:17,030
Anotación estereotipo va a fallar porque no lo encuentra, no encuentra el componente registrado en

73
00:05:17,030 --> 00:05:17,600
el contenedor.

74
00:05:17,750 --> 00:05:23,440
Pero no solamente podemos inyectar en atributos, también podemos inyectar el método setter y constructor,

75
00:05:23,540 --> 00:05:25,790
cosa que vamos a ver después con un ejemplo.

76
00:05:25,940 --> 00:05:32,540
Bueno, acá tenemos un ejemplo a simple vista una clase component usuario component podría ser usuario

77
00:05:32,540 --> 00:05:35,150
controller y estar anotada con controlar.

78
00:05:35,180 --> 00:05:40,640
En fin, da lo mismo, pero un componente manejado por Spring se le inyecta otro componente que también

79
00:05:40,640 --> 00:05:48,260
es manejado por Spring con ÂTu widget en el atributo y haciendo referencia al tipo genérico de la interfaz.

80
00:05:48,350 --> 00:05:53,540
Básicamente, como había explicado, para desacoplar una implementación concreta, inyectar mediante

81
00:05:53,540 --> 00:05:56,090
el método set o setter también muy parecido.

82
00:05:56,180 --> 00:05:59,660
En vez de inyectar en el atributo, podemos usar el auto Witter.

83
00:05:59,780 --> 00:06:06,650
En el método Set, por ejemplo Set Usuario Service, pasamos una referencia del usuario service como

84
00:06:06,650 --> 00:06:13,430
argumento del tipo del interfaz y se guarda en el atributo Inyectamos por métodos set y también por

85
00:06:13,430 --> 00:06:14,090
constructor.

86
00:06:14,240 --> 00:06:20,840
Acá tenemos el constructor usuario component que recibe como argumento el servicio y lo inyecta.

87
00:06:21,050 --> 00:06:26,990
En este caso, como estamos inyectando con atribuir mediante el constructor con parámetros, en este

88
00:06:26,990 --> 00:06:34,040
caso no sería necesario tener un constructor vacío, ya que la inyección y la creación de este componente

89
00:06:34,100 --> 00:06:40,070
usuario component lo hace mediante este constructor con parámetros, pero es porque estamos usando auto

90
00:06:40,070 --> 00:06:42,780
Suirez bien anotacion component y sus derivados.

91
00:06:42,890 --> 00:06:49,310
Ya hemos visto estos temas, pero para complementar la anotación, componer es un estereotipo genérico

92
00:06:49,370 --> 00:06:52,100
para cualquier componente manejado, manejado por explic.

93
00:06:52,280 --> 00:06:59,270
Pero además tenemos tres especializaciones para uso más específico, por ejemplo Repository para persistencia,

94
00:06:59,360 --> 00:07:01,760
componentes de acceso a los datos.

95
00:07:01,880 --> 00:07:08,510
Se le conoce como datos que realizan consultas, por ejemplo con JDBC de forma directa consultas a las

96
00:07:08,510 --> 00:07:10,880
tablas o bien utilizando o R.M.

97
00:07:10,910 --> 00:07:17,990
Con JPA o con internet, consultas o bien operaciones insert add de Delight en los Service.

98
00:07:18,110 --> 00:07:24,290
Otra anotación estereotipo se utilizan para servicios de lógica negocio para fachadas, por ejemplo

99
00:07:24,350 --> 00:07:30,690
para trabajar con varios dabo manejo de transacción en los métodos Enfield o cualquier tipo de clase.

100
00:07:30,710 --> 00:07:36,170
Servicios no solamente relaciona con persistencia y vaciado, también puede ser un servicio que lee

101
00:07:36,260 --> 00:07:43,610
un archivo plano o que realiza un request o petición a un servicio o API rest en otro servidor.

102
00:07:43,700 --> 00:07:49,400
En fin, todo lo relacionado con los datos y lógica negocio independiente, el origen o el DataSource.

103
00:07:49,550 --> 00:07:54,290
Net y controller para controladores MS componentes o pings.

104
00:07:54,380 --> 00:07:55,160
Qué nombre usamos?

105
00:07:55,280 --> 00:07:55,880
Da lo mismo.

106
00:07:55,970 --> 00:08:01,730
El término bin se utiliza para referirse a cualquier componente manejado por le podemos llamar pint

107
00:08:01,910 --> 00:08:02,720
o componentes.

108
00:08:02,840 --> 00:08:03,290
Da lo mismo.

109
00:08:03,410 --> 00:08:07,070
Lo pings deben ser anotados con la anotación componer o sus derivados.

110
00:08:07,220 --> 00:08:13,670
Debe tener un constructor vacío por defecto sin argumento, excepto que inyectamos con atuvo idea mediante

111
00:08:13,670 --> 00:08:14,270
constructor.

112
00:08:14,360 --> 00:08:21,140
Cualquier beans anotado con component o derivados bajo el paquete base serán instancias y manejados

113
00:08:21,140 --> 00:08:22,220
por el contenedor de spring.

114
00:08:22,340 --> 00:08:27,830
Por eso es importante que todas nuestras clases anotadas con component y sus derivados siempre tienen

115
00:08:27,830 --> 00:08:32,180
que estar dentro o en su рамках del bacas bas.

116
00:08:32,330 --> 00:08:37,070
Y acá tenemos otra forma para registrar componentes de Spring.

117
00:08:37,220 --> 00:08:42,740
Sin utilizar la anotación component podemos usar una clase anotada con configuration.

118
00:08:42,830 --> 00:08:48,320
Le damos el nombre que queramos a la clase, por ejemplo app config o aplicación config como queramos.

119
00:08:48,440 --> 00:08:54,980
Indica que la clase puede ser utilizada por el contenedor de Spring como una fuente de definiciones

120
00:08:54,980 --> 00:08:59,390
de beans, es decir, que esta clase va a tener varios métodos y estos métodos van a estar anotados

121
00:08:59,390 --> 00:09:00,350
con vim con las dos.

122
00:09:00,350 --> 00:09:06,830
En fin, y todo objeto que retorne estos métodos se van a guardar como componentes y también la anotación

123
00:09:06,860 --> 00:09:07,250
Beans.

124
00:09:07,340 --> 00:09:09,380
Le podemos dar un nombre igual que component.

125
00:09:09,500 --> 00:09:14,360
Acá podemos tener los paréntesis, comillas, un string y dar un nombre a este componente.

126
00:09:14,510 --> 00:09:21,950
Básicamente Vim permite crear objetos y registrarlos en el contenedor, pero mediante métodos y por

127
00:09:21,950 --> 00:09:28,220
supuesto utilizando el operador new, estamos creando la instancia de forma explícita y la guardamos

128
00:09:28,340 --> 00:09:29,030
en el contenedor.

129
00:09:29,210 --> 00:09:34,730
Entonces la anotación Vinh juega el mismo papel que anotar con la clase component.

130
00:09:34,880 --> 00:09:42,200
Lo definido anteriormente en la clase app config es equivalente a tener una clase por ejemplo usuario

131
00:09:42,200 --> 00:09:46,970
service que implementa la interfaz y usuario servis anotada con completo.

132
00:09:47,150 --> 00:09:48,740
Entonces tenemos esas dos form.

133
00:09:48,920 --> 00:09:56,210
De todas manera, vamos a ver un ejemplo utilizando configuré chón y Vinz para crear también componentes

134
00:09:56,300 --> 00:09:57,830
y registrarlos en el contenedor.

135
00:09:57,920 --> 00:09:59,810
Pero bien, por ahora creo que hemos visto.

136
00:10:00,000 --> 00:10:05,640
Lo más importante de inyección de dependencia, así que la próxima clase continuamos con más ejemplos

137
00:10:05,760 --> 00:10:08,080
y poner en práctica esta parte teórica.

138
00:10:08,250 --> 00:10:08,790
Nada más.

139
00:10:08,880 --> 00:10:09,570
Nos vemos.
