@Autowired@Qualifier和@Resource

@Autowired:是Spring自己定义的注解。@Autowired按byType自动注入。注入系统类型不会有type相同的多个类问题。当自定义了多个type相同,名称不同的类时使用@Qualifier进行限定。@Qualifier默认限定的是name。使用@Qualifier需要在配置文件<bean>标签的内部添加<qualifier>标签配置。<qualifier>标签内部可以使用<attribute>标签定义限定的key和value属性。例如

<bean class="footmark.HelloWorld"> 
    <qualifier type="MovieQualifier"> 
        <attribute key="format" value="VHS"/> 
        <attribute key="genre" value="Comedy"/> 
    </qualifier> 
</bean> 
<bean class="footmark.HelloWorld"> 
    <meta key="format" value="DVD"/> 
    <meta key="genre" value="Action"/> 
</bean>

可以使用 <meta> 标签来代替 <qualifier/> 标签,如果 <meta> 标签和 <qualifier/> 标签同时出现,那么优先使用 <qualifier> 标签。如果没有 <qualifier> 标签,那么会用 <meta> 提供的键值对来封装 <qualifier> 标签。

自动注入时,如果找不到相应的定义会导致自动注入失败。

@Resource:是JSR-250规范定义的注解。还有例如@PostConstruct、@PreDestroy。@Resource默认按 byName自动注入。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
  @Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

什么时候用@Resource,什么时候用@service

https://www.cnblogs.com/zhangxj/p/3970608.html

猜你喜欢

转载自blog.csdn.net/icing77/article/details/85231350