导航

@Required @Autowired @Resource注解详解

Posted on 2013-10-23 12:58  曙光城邦  阅读(4702)  评论(0编辑  收藏  举报

一、@Required注解用于检查特定的属性是否设置

1.RequiredAnnotationBeanPostProcessor 为该注解的处理器,即bean后置处理器,检查所有带有该解的bean属性是否设置,如果未设置则抛出异常。

2.在spring配置文件中可以通过<context:annotation-config/>元素自动注册RequiredAnnotationBeanPostProcessor处理器。

3.RequiredAnnotationBeanPostProcessor处理器还能自定义注解用于检查属性,功能与@Required一致

   如:

   1.定义一个注解类型

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CustomRequired {

}

   2.配置RequiredAnnotationBeanPostProcessor,注入自定义注解类型

 <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor">
      <property name="requiredAnnotationType">
        <value>CustomRequired</value>      
      </property>
  </bean>

然后就可以使用@CustomRequired 检查属性是否设置,功能与@Required一致。

 

 

二、@Autowired根据类型注入bean属性

1.AutowiredAnnotationBeanPostProcessor为该注解的处理器

2.在spring配置文件中可以通过<context:annotation-config/>元素自动注册AutowiredAnnotationBeanPostProcessor处理器

3.默认情况下@Autowired的属性是必须的,如果未设置会抛出异常。可以将@Autowired的required属性设置为false,当未找到匹配的bean,则不设置标注的属性

4.

  当注解到数组或List集合中,spring将所有类型匹配的bean注入到该数据或List集合中

  @Autowired

  private Generator[] generators;

  当注解到key为字符串的Map上,则将所有类型匹配的bean注入到map中,bean名称为key。

 @Autowired

 private Map<String,Generator> generators;

 

注意:如果在类中指定 @PostConstruct 后置处理器,那么在其中就可以使用@Autowired等依赖注入的对象。

他们在后置处理器执行前就已经依赖注入好了。

 

5.@Qualifier注解可以限定@Autowired注解到按类型以及名称注入bean。

 @Autowired

 @Qualifier("myGenerator")

 private Generator generator;   //则注入类型为Generator并且名称为myGenerator的bean

 

6.@Autowired注入非集合和数组属性时,如果发现多个匹配类型则报异常。因为按它按类型匹配,发现多个,无法确定注入哪个

 

三@Resource按名称注入属性,未找到则按类型注入。

1.CommonAnnotationBeanPostProcessor 为该注解的处理器  org.springframework.context.annotation.CommonAnnotationBeanPostProcessor