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

标签 java spring hibernate spring-data-jpa

我有时会发现 Spring 组件同时带有 @Service 和 @Repository 注释。像这样的事情:

@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 进行元注释,这使得它们符合扫描条件。从 Spring 5.0 开始,@Service 不再添加进一步的逻辑,而 @Repository 可以向 Spring DAO 异常集添加异常转换(如果启用)。

但是,还值得注意的是,在您提供的示例中,拥有 EventService 比仅拥有 Spring Data 存储库没有任何优势,并且如果有其他逻辑,那么它就不会像存储库(EventRepository 依赖项是)。

tl;dr:两者都使用@Component@Service,它们之间没有显着差异(@Component正在变得越来越多)通常是因为这个)。

关于java - Spring - 使用@Service和@Repository注释同一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49034604/

相关文章:

java - 当表上的特定列发生更改时,如何阻止 JTable TableModelListener 触发或监听

java - CDI Weld 忽略排除项

spring - Java 包 org.apache.poi.hssf.usermodel.* 的 Jar 实用程序

mysql - Hibernate criteriaQuery - 左连接

java - Kotlin 使用可变数量的参数调用错误的重载 java 方法

java - 在 Java 中打印 ASCII 菱形图

java - 如何在没有注释的情况下在 Spring 核心中初始化 MongoClient 时注入(inject) Mongo 选项?

java - 仅验证选定的其余端点 : spring boot

java - Spring 为什么 session 在 session 超时之前就过期了?

java - 三层数据,父子孙