Java Spring-用@Service和@Repository注释同一个类

Java Spring-用@Service和@Repository注释同一个类,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,有时我会发现用@Service和@Repository注释的Spring组件。大概是这样的: @Service("carService") @Repository @Transactional public class CarServiceImpl implements CarService { ... } @Transactional @Repository public class EventService { @Autowired private EventRe

有时我会发现用@Service和@Repository注释的Spring组件。大概是这样的:

@Service("carService")
@Repository
@Transactional
public class CarServiceImpl implements CarService {
    ...
}
@Transactional
@Repository
public class EventService {

    @Autowired
    private EventRepository repository;

    public EventEntity save(final EventEntity entity) {
        return repository.save(entity);
    }

    public EventEntity findOne(final String idEvent) {
        return repository.findOne(idEvent);
    }
}
或者像这样:

@Service("carService")
@Repository
@Transactional
public class CarServiceImpl implements CarService {
    ...
}
@Transactional
@Repository
public class EventService {

    @Autowired
    private EventRepository repository;

    public EventEntity save(final EventEntity entity) {
        return repository.save(entity);
    }

    public EventEntity findOne(final String idEvent) {
        return repository.findOne(idEvent);
    }
}

这样做似乎很方便,但技术上正确吗?

无论是
@Service
还是
@Repository
都使用
@Component
进行了元注释,这使得它们符合扫描条件。从Spring5.0开始,
@Service
不再添加任何逻辑,而
@Repository
可以在启用时向SpringDAO异常集添加异常转换

然而,还值得注意的是,在您提供的示例中,拥有
EventService
比仅仅拥有Spring数据存储库没有任何优势,如果有额外的逻辑,那么它就没有存储库的功能(依赖关系是
EventRepository


tl;dr:在这两种情况下都使用
@Component
@Service
,两者之间没有显著差异(
@Component
正因为如此变得越来越常见)。

感谢您的回答,
EventService
包含许多其他内容,我只是删除了它们以提高可读性。