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)
@Log4j2
@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = SyncRandomNumbers.class)
class HashCodeTest {
@Autowired
private SyncRandomNumbers syncRandomNumbers;
@Autowired
private SyncRandomNumbers syncRandomNumbers2;
@Test
@DisplayName("Comparando el mismo hashcode, en este caso ambos seran iguales, son singletons" +
"Aun sabiendo que ambos son anotados con @Service")
void testMyHashcode() {
log.info("Hashcode: {}", syncRandomNumbers.hashCode());
log.info("Hashcode2: {}", syncRandomNumbers2.hashCode());
assertThat(syncRandomNumbers.hashCode()).isEqualTo(syncRandomNumbers2.hashCode());
}
}