Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2019/04/09--@Autowire和@Resource的区别 #27

Open
lq920320 opened this issue Apr 9, 2019 · 0 comments
Open

2019/04/09--@Autowire和@Resource的区别 #27

lq920320 opened this issue Apr 9, 2019 · 0 comments

Comments

@lq920320
Copy link
Owner

lq920320 commented Apr 9, 2019

对比 @Autowire@Resource

  • @Autowire@Resource都可以用来装配bean,都可以用于字段或setter方法。
  • @Autowire 默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许 null 值,可以设置它的 required 属性为 false。
  • @Resource 默认按名称装配,当找不到与名称匹配的 bean 时才按照类型进行装配。名称可以通过 name 属性指定,如果没有指定 name 属性,当注解写在字段上时,默认取字段名,当注解写在 setter 方法上时,默认取属性名进行装配。

注意:如果 name 属性一旦指定,就只会按照名称进行装配。

  • @Autowire@Qualifier配合使用效果和@Resource一样:
@Autowired(required = false) @Qualifier("example")
private Example example;

@Resource(name = "example")
private Example example;
  • @Resouce 装配顺序
  1. 如果同时指定 name 和 type,则从容器中查找唯一匹配的 bean 装配,找不到则抛出异常;
  2. 如果指定 name 属性,则从容器中查找名称匹配的 bean 装配,找不到则抛出异常;
  3. 如果指定 type 属性,则从容器中查找类型唯一匹配的 bean 装配,找不到或者找到多个抛出异常;
  4. 如果不指定,则自动按照 byName 方式装配,如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配。

简要对比表格

注解对比 @Resource @Autowire
注解来源 JDK Spring
装配方式 优先按名称 优先按类型
属性 name、type required

链接:https://blog.csdn.net/u012102104/article/details/79481007

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant