美文网首页
Spring IoC容器之基于注解的配置

Spring IoC容器之基于注解的配置

作者: 夏与清风 | 来源:发表于2019-07-17 10:39 被阅读0次

    spring支持多种配置方式,如XML方式、基于注解方式等。比较常用的是基于注解的方式,它将配置信息移入组件类中,在相关的类、方法或字段上声明并使用注解。

    spring提供了很多注解,如@Required、@Autowired、@Resource、@PostConstruct、@PreDestroy、@Inject、@Qualifier、@Named、@Provider等。

    基于注解的配置注入会在基于XML配置注入前执行,如果同时使用两种方式,后面的配置会覆盖前面装配的属性。

    1、@Required

    @Required注解应用于bean属性的setter方法,它只表明受影响的bean的属性必须在bean定义中或自动装配中通过明确的属性值在配置时来填充。如果受影响的bean的属性没有被填充,则容器会抛出异常。示例如下:

    2、@Autowired

    可以使用@Autowired注解到传统的setter方法中,JSR-330中的@Inject注解可以代替@Autowired。如下:

    将注解应用于setter方法   将注解应用于任意名称或多个参数的方法 将注解应用于构造方法和字段 将注解应用于特定类型bean的期望类型数组字段或方法 将注解应用于特定类型的集合

    默认情况下,当出现0个候选bean时,自动装配就会失败。默认的行为是将被注解的方法、构造器和字段作为需要的依赖关系,此行为可以通过如下方式来改变:

    设置注解的默认行为

    推荐使用@Autowired的required属性,required属性表示属性对于自动装配目的不是必须的,如果不能被自动装配,则属性就会被忽略。@Required注解强制了由容器支持的各种方式的属性配置,相比于required属性它更健壮。

    3、@Primary

    通过类型的自动装配可能会有多高候选者,当一个依赖有多个候选者bean时,@Primary注解指定了一个优先提供的特殊bean。当多个候选者bean中存在一个明确指定了@Primary的bean时,就会自动装载这个bean。如下:

    多个候选者bean中使用@Primary messageService将使用firstMessage自动注解

    4、@Qualifier

    @Qualifier注解是另一种可以达成更多控制目的的做法,可以用特定参数来关联限定符的值,缩小类型的集合匹配,特定的bean就为每个参数来选择,示例如下:

    用特定参数来关联限定符的值 在独立的构造器参数或方法的参数中来指定

    5、@Resource

    spring支持使用@Resource注解在字段或bean属性的setter方法上注入。@Resource使用name属性,spring默认解析这个值作为要注入bean的名称。示例如下:

    如果没有指定name值,则默认的名称就从字段名称或setter方法中派生出来。若是字段就会用字段名称,若是setter方法就会用bean的属性名称。示例如下:

    名称为messageService的bean通过setter方法注入

    6、@PostConstruct与@PreDestroy

    CommonAnnotationBeanPostProcessor既可以识别@Resource注解,也可以识别JSR-250规范的生命周期注解,如下:

    基于注解的配置和基于XML的配置对比

    无论选择哪种方式都有利弊,基于注解的配置在生命中提供了大量的上下文,配置过程更加简洁,但它会让配置变得分散且难以控制。而基于XML的方式更擅长装配组件,无须修改源码或重新编译。

    --参考文献《Srping5开发大全》

    相关文章

      网友评论

          本文标题:Spring IoC容器之基于注解的配置

          本文链接:https://www.haomeiwen.com/subject/qviukctx.html