写点什么

Spring @Repository 注解

作者:HoneyMoose
  • 2022 年 8 月 27 日
    美国
  • 本文字数:902 字

    阅读完需:约 3 分钟

Spring 的项目严重依赖注解。


@Repository 注解


在 Spring2.0 之前的版本中,@Repository 注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即 dao 对象),并支持自动处理数据库操作产生的异常


在 Spring2.5 版本中,引入了更多的 Spring 类注解:@Component,@Service,@Controller。Component 是一个通用的 Spring 容器管理的单例 bean 组件。而 @Repository, @Service, @Controller 就是针对不同的使用场景所采取的特定功能化的注解组件。


因此,当你的一个类被 @Component 所注解,那么就意味着同样可以用 @Repository, @Service, @Controller 来替代它,同时这些注解会具备有更多的功能,而且功能各异。


最后,如果你不知道要在项目的业务层采用 @Service 还是 @Component 注解。那么,@Service 是一个更好的选择。


就如上文所说的,@Repository 早已被支持了在你的持久层作为一个标记可以去自动处理数据库操作产生的异常(译者注:因为原生的 java 操作数据库所产生的异常只定义了几种,但是产生数据库异常的原因却有很多种,这样对于数据库操作的报错排查造成了一定的影响;而 Spring 拓展了原生的持久层异常,针对不同的产生原因有了更多的异常进行描述。


所以,在注解了 @Repository 的类上如果数据库操作中抛出了异常,就能对其进行处理,转而抛出的是翻译后的 spring 专属数据库异常,方便我们对异常进行排查处理。


通过上面的话来看就是如果是数据库持久层的就使用 @Repository 注解就好了。


根据 Spring Data JPA 的项目,我们会首先定义一个接口,在这个接口上可能会继承 CrudRepository。


如下面的代码:


@Repositorypublic interface VisaCheckeeRepository extends CrudRepository<VisaCheckee, Long> {


VisaCheckee findVisaCheckeeByCheckeeVisaId(String checkeeVisaId);
复制代码


}


上面的代码中,就算不使用 @Repository 也是可以被扫描到的。


当然我们还是建议使用 @Repository 来注解这个与持久层有关的访问。


如果你还有实现类的话,也记得把你的实现类用 @Repository 注解上。


如果,我们来看看上面的图,就能比较直观的了解 @Repository 这个注解在 Spring 项目中的地位了。


https://www.ossez.com/t/spring-repository/14075

用户头像

HoneyMoose

关注

还未添加个人签名 2021.03.06 加入

还未添加个人简介

评论

发布
暂无评论
Spring @Repository 注解_HoneyMoose_InfoQ写作社区