Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Beginner Web en 30 Junio 2021, 06:55 am



Título: acerca de spring Java
Publicado por: Beginner Web en 30 Junio 2021, 06:55 am
Una regunta cuando uso el @Autowired para un objecto este vive durante toda la aplicacion?

se puede usarlo como carro de compra?  :huh:


Título: Re: acerca de spring Java
Publicado por: rub'n en 25 Julio 2021, 17:03 pm
Claro, el IOC de spring lo maneja como singleton.

Lo mejor es que realices inyección por constructor y no vía variable de instancia.

Añadiendo que desde spring 4.3 ya no hace falta que uses esa anotacion porque ya son tratados como si tuvieran @Autowired, pruébalo tu misma, con un simple test e instancia 2 veces un mismo servicio y compara su hashCode

Por ejemplo, yo de verdad no se que estaras haciendo y como, pero aqui tienes un pequeño ejemplo, de que son tratados como singleton( una unica instancia durante toda la vida de la aplicación)

Código
  1. @Log4j2
  2. @ExtendWith(SpringExtension.class)
  3. @ContextConfiguration(classes = SyncRandomNumbers.class)
  4. class HashCodeTest {
  5.  
  6.    @Autowired
  7.    private SyncRandomNumbers syncRandomNumbers;
  8.  
  9.    @Autowired
  10.    private SyncRandomNumbers syncRandomNumbers2;
  11.  
  12.    @Test
  13.    @DisplayName("Comparando el mismo hashcode, en este caso ambos seran iguales, son singletons" +
  14.            "Aun sabiendo que ambos son anotados con @Service")
  15.    void testMyHashcode() {
  16.  
  17.        log.info("Hashcode: {}", syncRandomNumbers.hashCode());
  18.        log.info("Hashcode2: {}", syncRandomNumbers2.hashCode());
  19.        assertThat(syncRandomNumbers.hashCode()).isEqualTo(syncRandomNumbers2.hashCode());
  20.    }
  21. }
  22.