@repository的含义,并且有时候却不用写,为什么?

Posted yuyu666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@repository的含义,并且有时候却不用写,为什么?相关的知识,希望对你有一定的参考价值。

//最后发现是这样的:@repository跟@Service,@Compent,@Controller这4种注解是没什么本质区别,都是声明作用,取不同的名字只是为了更好区分各自的功能.下图更多的作用是mapper注册到类似于以前mybatis.xml中的mappers里.

技术分享图片

//也是因为接口没办法在spring.xml中用bean的方式来配置实现类吧(接口配不了),所以只能用注解或者mybatis.xml中扫描bean的方式来生成实现类吧

一,首先:@repository是用来注解接口,如下图:这个注解是将接口BookMapper的一个实现类(具体这个实现类的name叫什么,还需要再分析源码找找看)交给spring管理(在spring中有开启对@repository注解的扫描),当哪些地方需要用到这个实现类作为依赖时,就可以注入了.当然我们也可以主动给这个实现类命名,如下图

技术分享图片e

技术分享图片

二,为什么有时候我们不用@repository来注解接口,我们照样可以注入到这个接口的实现类呢?如下图,下图是在接口没有用

@repository注解的情况下,依然可以实现注入它的实现类.

技术分享图片

上面是在idea中报了红线警告,说找不到这个实现类,但依然是可以运行,没有问题(只是单纯的警告),而在myeclipse中,是连警告都没有的,运行完全没问题.这是因为如下图:

技术分享图片

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

以上是关于@repository的含义,并且有时候却不用写,为什么?的主要内容,如果未能解决你的问题,请参考以下文章

@Repository注解的作用

我想问下为啥在写php程序中,有些html直接写,有些却通过echo来写html?

封装继承多态的基本详细使用方式与方法以及含义

c语言中#if defined是啥含义 怎么用

oracle 禁用唯一性约束该如何写语句? 我的表名是OEM_REPOSITORY

正则表达式 (.*) .* 就是这2种写法,有啥却别?分别代表啥含义?