关于@Autowired和@Resource注解的问题

关于@Autowired和@Resource注解的问题

我学完spring后,发现自己映射学掌握太差,

在本项目中,如果我想用@Resource代替@Autowired

我知道@Resource先按名字查找注入,

所以我在UserServiceImpl这个类上使用了@Service("userService"),以便在UserController中利用@Resource注入

=================================

UserServiceImpl

https://img1.sycdn.imooc.com//climg/617b87dc09b7d3f906730379.jpg

==========================================

UserController

https://img1.sycdn.imooc.com//climg/617b882f09fe718f05140439.jpg

========================================

我有以下几个问题:

https://img1.sycdn.imooc.com//climg/617b895009623a7c06500397.jpg

1.如果我在UserServiceImpl类中想要用@Resource注解代替@ Autowired注解,我怎么确定哪个具体的类的对象被注入到userMapper中了?  这个UserMapper不像UserService接口把具体的实现类(UserServiceImpl)写出来了,所以我可以清楚的知道我在UserController中利用@Resource注入的是UserServiceImpl的对象.

2.如果我在UserServiceImpl类中只是用了@Service()没有用@Service("userService"),在Ioc容器中UserServiceImpl类的bean名字自动是userServiceImpl而不是userService对吗?

https://img1.sycdn.imooc.com//climg/617b8c120925553c06620419.jpg

3.第三个问题和第一问有点关联,我理解的是userMapper类的具体实现类是由UserMapper.xml通过反射生成的,那么生成的类对象都会交给Ioc统一管理吗?那么具体的bean名称是什么?我们有什么

方法可以控制bean的名称

https://img1.sycdn.imooc.com//climg/617b8cb509f9878519201039.jpg

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

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

2回答
好帮手慕小脸 2021-10-30 16:52:35

同学你好,非常抱歉,没有及时回复同学的问题,因后台进行了拦截,导致同学的回复不能正确显示,望谅解~

1、是的

2、是通过对应xml文件中的namespace来确定的,映射文件中的namespace是用于绑定Dao接口的

祝学习愉快~

好帮手慕小脸 2021-10-29 18:29:53

同学你好,

1、当@Resource设置name属性时,则会按照name在IOC容器中将bean注入

若未设置,以属性名作为bean name 在IoC容器中匹配bean,如有匹配则注入

若按属性名未匹配,则按类型进行匹配

注:建议同学回顾之前的课程去回顾上述两个注解

https://class.imooc.com/course/1406

2、是的,默认是当前类名,但是首字母小写 

3、1)是通过JDK动态代理方式实现的,我们在启动加载配置文件的时候,会根据mapper的xml文件去生成一个DAO的实现

2)mapper.xml文件与对应接口建立关系,需要通过namespace,而这里说的bean与其关系不是很理解

祝学习愉快~

  • 提问者 慕设计7678942 #1

    3、1)是通过JDK动态代理方式实现的,我们在启动加载配置文件的时候,会根据mapper的xml文件去生成一个DAO的实现

    例如本项目的dao层的UserMapper的具体实现类是根据UserMapper.xml文件生成的对吧?这个UserMapper的具体实现类的对象也会交给IOC管理吧? 这个UserMapper的具体实现类的bean名称会是userMapper吗?

    https://img1.sycdn.imooc.com//climg/617b895009623a7c06500397.jpg

    其实我就是想搞明白,在UserServiceImpl里我用@Resource通过name注入 UserMapper userMapper,具体是哪个UserMapper的具体实现类的对象被注入了,我不知道UserMapper的具体实现类是哪一个, 我可能表达有问题.....

    2021-10-29 20:55:28
  • 提问者 慕设计7678942 #2

    昨天我有回复,今天查贴怎么没有了

    2021-10-30 14:04:10
  • 提问者 慕设计7678942 #3

    https://img1.sycdn.imooc.com//climg/617b895009623a7c06500397.jpg


    3、1)是通过JDK动态代理方式实现的,我们在启动加载配置文件的时候,会根据mapper的xml文件去生成一个DAO的实现

    根据老师的回答,UserMapper接口被UserMapper.xml实现了,那么具体的实现类对象会被IOC管理,那么UserMapper接口的具体实现类对象的bean名称会自动是userMapper吗?

    =========================================

    @Resource

    UserMapper userMapper;


    其实我主要想要想问的是 如何确定UserMapper接口的具体实现类是哪一个,这样我就可以确定通过@Resource注解的name方法确定到底谁被注入了




    2021-10-30 14:14:17
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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