• @Resource、@Autowired、@Qualifier


    @Resource注解是由J2EE提供,而@Autowired是由Spring提供

    1. @Resource

    @Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;@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方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

    2.@Autowired

    @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。

      在使用Spring框架中@Autowired标签时默认情况下使用 @Autowired 注释进行自动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个。
      当找不到一个匹配的 Bean 时,Spring 容器将抛BeanCreationException 异常,并指出必须至少拥有一个匹配的 Bean。

      Spring 允许我们通过 @Qualifier 注释指定注入 Bean 的名称,@Qualifier("XXX") 中的 XX是 Bean 的名称,

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

    TODO.  @Autowired是通过反射注入bean

    『愿你我既可以朝九晚五,又能够浪迹天涯』
  • 相关阅读:
    四元数
    Advanced Packaging Tool
    离散
    Functional programming
    异步传输同步传输
    没有动态库链接:可执行的文件大小一个就有几百兆 DynamicLink Libraries
    Levenshtein distance
    arguments
    prototype linkage can reduce object initialization time and memory consumption
    similar_text
  • 原文地址:https://www.cnblogs.com/zjwwljty/p/7452221.html
Copyright © 2020-2023  润新知