• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于@Autowierd && @Resource 你真的了解吗

java 搞代码 4年前 (2022-01-05) 29次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了关于@Autowierd && @Resource的具体使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

关于@Autowierd && @Resource 你真的了解吗

1.@Autowierd

使用byType注入,默认情况下要求依赖必须存在;配置required=false表示依赖可为null

下面代码第一个注入是会报错的,编辑器是会有红色提示。

因为代码中没有这样的bean,截图也能看的出来。

 @Autowired private Data data;   //报错 @Autowired(required = false) //没事 private Data data2; 

2.@Resource

按照ByName自动注入,@Resource有两个重要的属性:nametype,而Spring将@Resource注解的 name属性解析为bean的名字,而type属性则解析为bean的类型。

所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。

如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

2.1@Resource具体装配顺序,即指定的注入实例的策略

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配(即按照byType的方式)

3.注意

如果是接口或者抽象类的话那么需要实现类唯一,否则创建实例出错,或者说当接口或抽象类有n多个实现类(继承类)时,在注入的必须指定此时要注入的实现类(继承类)。

找到两个实现类,报错!!!

3.1 @Autowierd解决

@Autowierd需要借助@Qualifier来帮助区分使用具体的哪个实现类

 @Autowired @Qualifier("userServiceImpl") private UserService userService; 

3.2 @Resourc来源gao@daima#com搞(%代@#码@网e解决

@Resource 可以使用name属性或者是type属性来指定想要注入的实现类。

 @Resource(name = "userServiceImpl2") private UserService userService1; @Resource(type = UserServiceImpl.class) private UserService userService3; 

4.高级用法

@Autowierd 注入抽象类时,当抽象类有多个继承类,可以使用

@Autowierd List ll;//来获取所有的子类实现集合

 @Autowired private List userServices; 

小结:

  • @Autowierd & @Resource 功能相当,都可以注入实例
  • @Autowierd 通过byType的方式注入
  • @Resource 优先使用byName的方式注入,然后使用@Autowire的方式注入

这就是为什么mybatis自动生成的Mapper文件,你使用@Resouce Idea不会提示红色下划线(其实在dao文件的已经被扫描了,但是ieda在编辑的时候找不到,但是在运行中是能够找到的)

1.dao层配置

2.mybatis自动生成Mapper文件

3具体情况:一看便知

看着报错,其实不会有错,以为在2中已配置包扫描了。

 @Autowired private TCommentInfoMapper tCommentInfoMapper; @Resource private TCommentInfoMapper tCommentInfoMapper2; 

@Autowire和@Resource注解对比

在我看来@Autowire和@Resource有两个区别:

一、@Resource是J2EE提供的,@Autowire是Spring提供的

二、两个注解使用name区别注入的写法不同

三、然后就没有什么不同了

网上很多人专门介绍@Resource能够用变量名或set方法里的变量名作为对象name来使用,说的好像@Autowire就不能似的.

以上为个人经验,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网

以上就是关于@Autowierd && @Resource 你真的了解吗的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于@Autowierd && @Resource 你真的了解吗

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址