Java Spring-用@Service和@Repository注释同一个类
有时我会发现用@Service和@Repository注释的Spring组件。大概是这样的: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("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
包含许多其他内容,我只是删除了它们以提高可读性。