Suppose I have the following JPA repository:
public interface IGreetingRepository extends JpaRepository<Greeting, Long> {
}
And according to the documentation I would have to generate a service interface as follows:
public interface IGreetingService {
Greeting getGreetingById(Long id);
List<Greeting> getAllGreetings();
Greeting saveGreeting(Greeting greeting);
void deleteGreeting(Long id);
}
And then the implementation:
@Service
@Qualifier("greetingService")
public class GreetingServiceImpl implements IGreetingService {
@Autowired
@Qualifier("greetingRepository")
IGreetingRepository greetingRepository;
@Override
public Greeting getGreetingById(Long id) {
return greetingRepository.findOne(id);
}
@Override
public List<Greeting> getAllGreetings() {
return greetingRepository.findAll();
}
@Override
public Greeting saveGreeting(Greeting greeting) {
return greetingRepository.save(greeting);
}
@Override
public void deleteGreeting(Long id) {
greetingRepository.delete(id);
}
}
And to use my service in my controllers I would inject it like this:
@Autowired
@Qualifier("greetingService")
GreetingService greetingService;
What I do not understand is, what is the advantage of doing so instead of directly injecting the JPA repository interface and saving me the 2 classes?:
@Autowired
@Qualifier("greetingRepository")
IGreetingRepository greetingRepository;