@repository、@Service、@Compent、@Controller与@Mapper、@MapperScan

@Repository、@Service、@Compent、@Controller与@Mapper、@MapperScan解释与区别

一、@Repository、@Service、@Compent、@Controller区别

@Repository、@Service、@Compent、@Controller这四个注解标签都是Spring注解,都是使其对象被Spring管理,严格来说他们是有区别的:

  1. @Repository一般作用于持久层,也是Spring引入第一个管理Bean的注解标签,有助于持久化异常抛出与管理;现在好多开发都是面向接口编程,在持久层都是默认实现,也无法在xml中配置持久层配置被实例化的细节,现在好多项目中持久层只有@Mapper注解,则没有@Repsoitory。

  2. @Service主要作用于业务层,对于事务有着特殊的支持,比如事务回滚,在其他标签正常是做不到的啊。

  3. @Controller在控制层,针对请求与数据返回有很好的之支持。

  4. @Compent标记当前对象被Spring管理,标记为Spring一个组件,一般用在通用配置上或者工具类加载,没有特殊意义。

二、只见@Mapper不见@Repository

现在好多项目中只见@Mapper注解却不见@Repsitory注解,为什么也是可以实现自动注入?是因为我们在mybatis的xml文件配置了上图这个bean,它会去将dao这个层中的mapper(也就是我们的接口)都生成实现类,然后交给spring管理(因为mybatis.xml文件我们最终还是导入了spring容器中),所以我们这里不对这些接口用@repository注解,也是一样可以用它的实现类,(这也是我们写项目时,有时感觉完全是没用到@repository注解的原因,因为没有什么必要)而idea报红线警告,可能是idea自己的原因,这个在我们对它对应的接口用@repository注解后,红线警告会消失,运行也完全没问题,但是这是不规范的。

三、@Mapper与@MapperScan

  • @Mapper指明当前接口是允许MyBatis扫描的接口,指明时只需加在持久化接口上就可以。
  • @MapperScan开启路径识别,标记当前路径下接口文件默认为MyBatis接口文件。
  • 两者的作用是一样的,一个是指定当前接口,一个是指定路径,如果接口文件是集中 @MapperScan只需要指定一次。
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值