@Autowired、@Qualifier、@Resource的区别
在Java代码中可以使用 @Resource或者 @Autowired 注解方式来进行注入。虽然 @Resource 和 @Autowried 都可以完成依赖注入,但是他们是有区别的。
@Resource
@Resource 属于 JSR-250 规范定义的注解,默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来注入。
它有两个属性是比较重要的:
- name: Spring 将 name 的属性值解析为 bean 的名称, 使用 byName 的自动注入策略
- type: Spring 将 type的属性值解析为 bean 的类型,使用 byType 的自动注入策略
如果既不指定 name 属性又不指定 type 属性,Spring这时通过反射机制使用 byName 自动注入策略
@Resource 的装配顺序
-
如果同时指定了 name 属性和 type 属性,那么 Spring 将从容器中找唯一匹配的 bean 进行装配,找不到则抛出异常
-
如果指定了 name 属性值,则从容器中查找名称匹配的 bean 进行装配,找不到则抛出异常
-
如果指定了 type 属性值,则从容器中查找类型匹配的唯一的 bean 进行装配,找不到或者找到多个都会抛出异常
-
如果都不指定,则会自动按照 byName 方式进行装配, 如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配
@Autowired @Qualifier
@Autowired @Qualifier 属于 Spring 定义的注解
默认是按照类型byType 进行装配注入,默认情况下,它要求依赖对象必须存在,如果允许 null 值,可以设置它 required 为false。
如果想要根据 bean 名称注入,可以利用Spring 提供的 @Qualifier 注解,通过它进行 bean 名称注入。

浙公网安备 33010602011771号