Software Development Notions

Inyección de dependencias

April 17, 2020

Repositorios

Por convención para guardar datos se usan los repositorios. A la clase que definamos como repositorio le añadimos la anotación “@Repository” para que el framework entienda que se usara dicha clase como la capa de repositorio.

@Repository
public class PersonaRepositoryImpl implements PersonaRepository {
    private static Logger LOG = LoggerFactory.getLogger(PruebaSpringBootApplication.class);
    @Override
    public void registrar(String nombre) {
        LOG.info("SE REGISTRO A "+ nombre);
    }
}

Servicios

Es la capa de lógica de negocio. La clase debe llevar la anotación “@Service” para indicar que funcionará como la capa de negocio. Si ponemos el ejemplo de que éste servicio actúa sobre un repositorio, podemos crear una instancia del repositorio con la etiqueta “@Autowired”, para que sea el propio Spring quien se encargue de crear una instancia de la clase.

@Service
public class PersonaServiceImpl implements PersonaService {
    @Autowired
    private PersonaRepository repo;
    @Override
    public void registrar(String nombre) {
    repo.registrar(nombre);
    }
}

Qualifier

Para tener varias implementaciones de una interfaz usaremos la etiqueta “@Qualifier”. En éste ejemplo tenemos dos tipos de personas (repositorios), y después desde un servicio accederemos a uno de los repos con la misma anotación.

@Repository
@Qualifier("persona1")
public class PersonaRepositoryImpl implements PersonaRepository {
    private static Logger LOG = LoggerFactory.getLogger(PruebaSpringBootApplication.class);
    @Override
    public void registrar(String nombre) {
        LOG.info("SE REGISTRO A "+ nombre);
    }
}
/**************************************************************************************/
@Repository
@Qualifier("persona2")
public class PersonaRepositoryImpl2 implements PersonaRepository {
    private static Logger LOG = LoggerFactory.getLogger(PruebaSpringBootApplication.class);
    @Override
    public void registrar(String nombre) {
        LOG.info("SE REGISTRO A "+ nombre + "(persona2)");
    }
}
/**************************************************************************************/
@Service
public class PersonaServiceImpl implements PersonaService {
    @Autowired
    @Qualifier("persona2")
    private PersonaRepository repo;
    @Override
    public void registrar(String nombre) {
    repo.registrar(nombre);
    }
}

Welcome to my blog about Software Development! I would like to invite you to learning with me 👨‍💻

Search all posts