zoukankan      html  css  js  c++  java
  • @Autowired 进行注入bean的过程

    注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。当找不到一个匹配的 Bean 时,Spring 容器将抛出 BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。

    @Autowired 默认是按照byType进行注入的,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。

    例子:
    
    //ExamUserMapper是一个接口
    //type可以说是ExamUserMapper
    //name可以说是examUserMapper
    @Autowired 
    private ExamUserMapper examUserMapper;

    步骤:

      1. spring先找类型type为ExamUserMapper的bean

      2. 如果存在且唯一,则OK;

      3. 如果不唯一,在结果集里,寻找name为examUserMapper的bean。因为bean的name有唯一性,所以,到这里应该能确定是否存在满足要求的bean了

    @Autowired也可以手动指定按照byName方式注入,使用@Qualifier标签,例如:

    @Autowired
    @Qualifier("
    examUserMapper")
    private ExamUserMapper examUserMapper;


    Spring 允许我们通过在使用@Autowired注解时,配合@Qualifier注解完成bean的默认byName注入

    注释指定注入 Bean 的名称,这样歧义就消除了,可以通过下面的方法解决异常。 

    中的examUserMapper是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。 

    @Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。 

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 

    相关:@Resource 进行注入bean的过程

  • 相关阅读:
    GTK+ 3.6.2 发布,小的 bug 修复版本
    RunJS 新增 Echo Ajax 测试功能
    Mozilla 发布 Popcorn Maker,在线创作视频
    Sina微博OAuth2框架解密
    Mina状态机State Machine
    Mozilla 发布 Shumway —— 纯JS的SWF解析器
    Code Browser 4.5 发布,代码浏览器
    ROSA 2012 "Enterprise Linux Server" 发布
    ltrace 0.7.0 发布,程序调试工具
    Artifactory 2.6.5 发布,Maven 扩展工具
  • 原文地址:https://www.cnblogs.com/lzghyh/p/13141375.html
Copyright © 2011-2022 走看看