Pessoal, Estou fazendo um projeto para estudar mais sobre Spring boot data, Para não ficar repetindo alguns CRUDS, eu resolvi criar uma classe genérica que, irá receber qualquer repository para fazer a persistencia, código abaixo :
//INTERFACE IGenericService
public interface IGenericService<E> {
public E save(E entity);
}
//IMPLEMENTAÇÃO GenericService
public class GenericService<E, T extends CrudRepository> implements IGenericService<E>, Serializable {
//implementações
}
E um exemple de um service seria a da classe User :
//INTERFACE IUserService
public interface IUserService extends IGenericService<User> {
}
//IMPLEMENTAÇÃO UserService
@Service
public class UserService extends GenericService<User, UserRepository> implements IUserService {
}
Note que a minha Interface IUserService esta extendendo a interface genérica que eu criei(IGenericService) e a implementação da classe IUserService(UserService) extende a minha classe genérica(GenericService). O problema é que, a minha classe UserService está implementando duas vezes a interface IUserService, uma através da minha classe genérica(GenericService) e a outra através da própria interface dela(IUserService), minha dúvida é, isso é correto fazer ? Estou extendendo a interface IGenericService na minha IUserService pois para utilizar o meu serviço eu estou injetando a minha interface no meu controller. Se não ficou claro aqui vai um exemplo :
public class UserController {
//INJEÇÃO DA MINHA INTERFACE IUserService PARA A UTILIZAÇÃO DOS CRUDS
@Autowired
private IUserService userService;
}
espero que tenham etendido e possam me ajudar, desde já agradeço :D