Autowired为人知的区别·Java·Resource 注解则是先按名称查找找不到再按类型查找
Autowired 和 Resource 注解:那些不为人知的区别
1、来源不同
Autowired 来自于大名鼎鼎的 Spring 框架,而 Resource 则是来自于 Java 的 JSR-250 规范提案。
2、注入规则不同
Autowired 注解主要是通过类型来注入的,但有时候需要配合 @Qualifier 或 @Primary 注解来明确指定注入哪个 bean。Resource 注解则更加灵活,它可以根据 name 或 type 注入,如果两者都没有指定,它默认会按照名称来注入。
Autowired 注解 | Resource 注解 |
---|---|
默认根据类型注入 | 默认根据名称注入,也可以根据类型 |
需要 @Qualifier 或 @Primary 来指定具体 bean | 如果 name 和 type 都不指定,则默认使用 byName |
3、依赖查找的顺序不同
Autowired 注解会先尝试按类型查找,如果找到多个,再按名称查找。Resource 注解则是先按名称查找,找不到再按类型查找。
4、支持的参数不同
Autowired 只支持一个参数,而 Resource 支持多达七个参数。
5、依赖注入的用法支持不同
Autowired 支持属性注入、构造方法注入和 Setter 注入,而 Resource 只支持属性注入和 Setter 注入。
6、编译器 IDEA 的提示不同
在使用 IntelliJ IDEA 专业版编写代码时,Autowired 注解在注入 Mapper 对象时可能会报错,而 Resource 注解则不会。
7、使用位置不同
两者都可以用在字段和 setter 方法上。推荐使用 Resource 注解在字段上,这样就不需要写 setter 方法了,而且还能降低与 Spring 的耦合。
延伸阅读:Autowired 和 Resource 的共同点
虽然两者有区别,但它们都可以用来注入 bean;在只有一个实现类的接口中,两者可以互相替换,效果是一样的。
希望这个更通俗的讲解能帮助你更好地理解 Autowired 和 Resource 注解的区别。