运行问题

运行问题

为什么在老师没有+@Repostory注解的时候, 通过按类型注入,程序可以自动运行呢?  没+@Repostory这个注解, ioc就不会类进行创建实例化啊。那怎么能运行起来呢???

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小脸 2021-06-08 15:50:27

同学你好,

1、理解大部分是对的,但还有一处有些小问题:这里并不是虚拟实现类,这个类在底层是存在的

2、是指如下举例这样吗?

http://img1.sycdn.imooc.com//climg/60bf1da509bb5a3705200169.jpg

如果是,这个提示是指存在两个EmployeeDao类型的bean。这个是由于在EmployeeDao接口上添加了@Repository注解,会生成一个bean。mybatis会根据dao接口和xml文件对应再生成一个bean。所以会提示生成两个bean。

这里同学可以使用@Qualifier()注解配合@Autowired一起使用即可

3、理解是可以的,但单词书写错误:@Repository

4、@Repository的作用是用来创建一个bean,并且用来标识这个bean是一个dao层的bean

祝学习愉快~

  • 提问者 rock221 #1

    那老师第一次没有+@Repository注解, 通过@Autowired注解,程序跑起来了,但是idea提示有错,这是因为,mybatis自动生成了,bean吧?且类型一致,但是生成的bean名字可能不一样? 所以可以运行,但是这样情况​,bean是多例的吧。 会响应内存吧。它说的是没找到啊。

    http://img1.sycdn.imooc.com//climg/60bf233709a2087d17940230.jpg

     不+@Repository注解,使用@Resources是一样的,都是多例的。而使用了@Repository注解,则是单例的。这两个注解都是从ioc容器中寻找bean的吧。 不+@Repository,能运行,都是因为mybatis生成了bean,且符合规范,所以会注入。对吧。

    2021-06-08 15:59:29
  • 提问者 rock221 #2

    @Qualifier()注解配合@Autowired一起使用即可 什么意思? 如果使用了@Resource注解, 接口没有被ioc容器实例化创建, 也可以运行, 是因为它是jdk注解,它先从ioc中寻找bean没找到, 然后它根据 注解的名字,寻找对应的类,自动生成了一个bean然后注入吗?

    2021-06-08 16:07:13
  • 好帮手慕小脸 回复 提问者 rock221 #3

    同学你好,

    1、是的

    2、生成bean名称的规则是类名首字母小写,所以名字是一样的

    3、出现上述报错,建议同学检查类或接口上是否缺少注解,其次这种情况部分原因也可能是idea识别的问题,如果不影响程序运行是可以忽略的

    4、不是的,@Repository 用于声明 dao 层的 bean,而@Resource主要做依赖注入的,从容器中自动获取bean

    5、这里是按照上述老师截图的报错提供的解决办法,是指如下这样:

    http://img1.sycdn.imooc.com//climg/60bf4b6609dd274e04760116.jpg

    6、不是的,@Resource注解是将ioc容器中的bean注入到对象属性中,它并不会自动生成一个bean

    ​祝学习愉快~

    2021-06-08 19:00:05
rock221 提问者 2021-06-08 12:57:48

追加:

好像明白了, 因为是按照类型匹配注入的, 虽然ioc没有创建, 但是在mybatis的mapper扫描中, 会自动会接口与xml绑定,并创建一个虚拟实现类,这个实现类是注入接口类型的,所以程序可以运行。 但是idea会提示红线,是因为没有找到userMapper名字的对象,因为注入的是虚拟产生的实现类。  对吗?? 


2、为什么通过@Resource注解,注入, dao层的接口不加@Repostory注解,也可以完成注入工作呢?原理是按照名字匹配, userMapper转换成类对象存在,则会自动创建注入吗? 如果不+@Repostory注解,则实现的是多例吗?

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师