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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring - 使用@Service和@Repository注释同一个类相关的知识,希望对你有一定的参考价值。

我不时会发现使用@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@Repository都使用@Component进行元注释,这使得它们有资格进行扫描。从Spring 5.0开始,@Service不再添加逻辑,而@Repository可以在启用时向Spring DAO异常集添加异常转换。

但是,值得注意的是,在您提供的示例中,使用EventService而不是简单地拥有Spring Data存储库没有任何优势,并且如果存在其他逻辑,则它不能用作存储库(EventRepository依赖项)。

tl; dr:在两者上使用@Component@Service,它们之间没有显着差异(@Component因此而变得更加平常)。

以上是关于Spring - 使用@Service和@Repository注释同一个类的主要内容,如果未能解决你的问题,请参考以下文章

Spring框架 4.3.6环境搭建

用spring 注解注入;dao和service都为null,是啥原因?

Spring中@Component的作用

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

Spring注解@Controller和@Service一样吗?

无法通过 repo 删除文档-> 使用 Webflux 在 Spring Boot 2.x 中删除