1
00:00:00,300 --> 00:00:00,930
Perfecto.

2
00:00:01,020 --> 00:00:08,280
Y qué pasaría si tuviéramos otra clase concreta que implemente la interfaz y servicio aparte de la que

3
00:00:08,280 --> 00:00:10,530
ya tenemos que implemente método operación?

4
00:00:10,620 --> 00:00:17,430
De otra forma, por ejemplo, vámonos al package service y podríamos crear esta clase o bien.

5
00:00:17,550 --> 00:00:26,250
Otra forma es click derecho en mi servicio Coppi y sobre el package click derecho pegar.

6
00:00:27,500 --> 00:00:37,490
Feist Y le cambiamos el nombre, por ejemplo, mi servicio complejo, por poner un nombre, otra implementación

7
00:00:38,030 --> 00:00:38,780
vamos a abrir.

8
00:00:40,140 --> 00:00:46,590
Acá, en vez de mi servicio simple, vamos a cambiar el nombre componente, le colocamos complejo,

9
00:00:47,520 --> 00:00:52,410
perfecto, ejecutando un proceso importante, complicado.

10
00:00:52,710 --> 00:01:01,050
Guardamos, vamos a mi servicio y acá colocamos proceso importante, simple para diferencia y guardamos.

11
00:01:01,200 --> 00:01:05,340
Entonces tenemos dos clases concretas que implementan la misma interfaz.

12
00:01:06,390 --> 00:01:12,960
Sin embargo, en el controlador estamos inyectando por la interfaz de servicio, pero tenemos dos implementaciones.

13
00:01:13,020 --> 00:01:14,070
Cuál va a inyectar?

14
00:01:14,130 --> 00:01:15,900
Queda completamente ambiguo.

15
00:01:16,050 --> 00:01:22,260
Spring no va a saber si inyectar mi servicio o mi servicio complejo, pero no importa.

16
00:01:22,380 --> 00:01:28,470
Ejecutemos la aplicación y veamos el error que nos da como sean pre click derecho ranas.

17
00:01:32,810 --> 00:01:33,470
Y acá está el error.

18
00:01:33,710 --> 00:01:40,850
El controlador Index requiere un único Pint, pero hay dos implementaciones contra mi servicio y mi

19
00:01:40,850 --> 00:01:41,850
servicio complejos.

20
00:01:41,850 --> 00:01:47,000
Si tenemos dos candidatos posible para la misma interfaz, entonces como solución tenemos dos caminos

21
00:01:47,090 --> 00:01:54,740
y en esta clase vamos a ver uno que sería marcando la clase concreta con primary o primary en la que

22
00:01:54,740 --> 00:01:57,290
queremos que sea la por defecto.

23
00:01:57,410 --> 00:02:04,370
Por ejemplo, si quiero que sea mi servicio complejo, la por defecto simplemente anotamos con primary

24
00:02:06,170 --> 00:02:06,860
importamos.

25
00:02:07,190 --> 00:02:10,790
Bueno, pues debajo de componer o arria de component da lo mismo el orden.

26
00:02:11,300 --> 00:02:13,640
Guardamos y volvemos a levantar.

27
00:02:20,440 --> 00:02:22,370
Bien, y ahora no da ningún error.

28
00:02:22,870 --> 00:02:26,500
Si nos vamos al navegador ejecutando un proceso importante, complicado.

29
00:02:26,530 --> 00:02:27,100
Perfecto.

30
00:02:27,190 --> 00:02:29,440
Inyectó justo el que queríamos.

31
00:02:29,680 --> 00:02:35,980
Y esto es bien potente, bien poderoso, ya que nos permite desacoplar completamente la implementación

32
00:02:35,980 --> 00:02:40,960
concreta de las clases que están usando estos componentes de servicio en este caso.

33
00:02:41,470 --> 00:02:42,250
Cualquier cambio.

34
00:02:42,280 --> 00:02:48,190
Si queremos hacer un switch entre una clase concreta y otra, simplemente cambiamos el primary.

35
00:02:48,400 --> 00:02:51,460
Por ejemplo, voy a cortar acá de una clase a otra.

36
00:02:51,580 --> 00:02:56,140
Ahora quiero que mi servicio sea el primary, sea el por defecto.

37
00:02:56,260 --> 00:02:57,430
Me voy a mi servicio.

38
00:02:57,910 --> 00:03:01,240
Voy a notar y guardamos las dos clases.

39
00:03:01,480 --> 00:03:02,620
Esperen a que se actualice.

40
00:03:02,830 --> 00:03:10,060
Y ahora si actualizamos navegador debería decir simple, perfecto, ejecutando un proceso importante,

41
00:03:10,060 --> 00:03:10,570
simple.

42
00:03:11,290 --> 00:03:18,010
Entonces, para finalizar la anotación, Primary permite seleccionar el candidato que queremos inyectar

43
00:03:18,040 --> 00:03:24,040
por defecto en nuestras clases, ya sea controlador o cualquier otra clase que utilice este componente

44
00:03:24,460 --> 00:03:31,000
sin tener que estar cambiando y modificando la clase que lo utilizan, cambiando por ejemplo, el tipo

45
00:03:31,120 --> 00:03:32,620
de un tipo concreto a otro.

46
00:03:32,680 --> 00:03:41,980
No usamos la interfaz siempre y en las implementaciones concreta de los componentes indicamos cuál es

47
00:03:41,980 --> 00:03:44,200
la principal la primaria en este caso.

48
00:03:44,390 --> 00:03:45,640
Bien, por ahora nada más.

49
00:03:45,730 --> 00:03:52,510
Y la próxima clase vamos a ver otra forma utilizando los calificadores o cualificar hasta la próxima.
