<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          還在使用@Autowired 嗎?

          共 2158字,需瀏覽 5分鐘

           ·

          2021-08-02 11:31

          既然標(biāo)題說了不推薦使用 @Autowired 那肯定有好的代替它的啦,那就是@Resource 。那 @Resource 是什么呢?下面我們?nèi)Ρ认?@Resource 和 @Autowired 的區(qū)別吧!

          區(qū)別一

          @Autowired 是 Spring 自帶的注解 @Resource 是 J2EE提供,Spring 支持

          區(qū)別二

          @Autowired 默認(rèn)按類型裝配 @Resource 默認(rèn)按照名稱進(jìn)行裝配

          我們一起看看 @Resource 的源碼。

          @Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
          @Retention(RetentionPolicy.RUNTIME)
          public @interface Resource {
              String name() default "";

              Class<?> type() default Object.class;

              Resource.AuthenticationType authenticationType() default Resource.AuthenticationType.CONTAINER;

              boolean shareable() default true;

              String description() default "";

              String mappedName() default "";

              String lookup() default "";

              public static enum AuthenticationType {
                  CONTAINER,
                  APPLICATION;

                  private AuthenticationType() {
                  }
              }
          }

          從上面看到 @Resource 有兩個重要的屬性:name 和 type 。

          上面雖然說了 "默認(rèn)按照名稱進(jìn)行裝配" 但是可以按照類型處理。

          Spring 將 @Resource 注解的 name 屬性解析為 bean 的名字,type 屬性則解析為 bean 的類型。所以如果使用 name 屬性,則使用 byName 的自動注入策略,而使用 type 屬性則使用 byType 自動注入策略。如果既不指定 name 也不指定 type 屬性,這時將通過反射機制使用 byName 自動注入策略。

          上面的話就是介紹了 @Resource 裝配順序:

          • 1 如果同時指定了 name 和 type ,則從 Spring 上下文中找到唯一匹配的 bean 進(jìn)行裝配,找不到則拋出異常
          • 2 如果指定了 name ,則從 Spring 上下文中查找名稱(id)匹配的 bean 進(jìn)行裝配,找不到則拋出異常
          • 3 如果指定了 type ,則從 Spring 上下文中找到類型匹配的唯一 bean 進(jìn)行裝配,找不到或找到多個,都拋出異常
          • 4 如果既沒指定 name ,也沒指定 type ,則自動按照 byName 方式進(jìn)行裝配。如果沒有匹配,則回退為一個原始類型進(jìn)行匹配,如果匹配則自動裝配。

          @Resource 大致講完了,是不是感覺 @Autowired 和 @Resource 都差不多,只不過一個是根絕類型,一個是根據(jù)名稱注入,什么建議使用 @Resource 呢?

          這么說吧,因為 @Resource 是 java 自帶的!以及在 idea 中不會有黃色提示線。而如果用 @Autowired 則 idea 會提示 "不建議使用字段注入 "。這可是喜歡干凈的人的福利呀,為什么你還不用上呢?


          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人毛片18女人免费视频 | 亚洲日韩日韩人兽在线 | 影音先锋东莞AV | 一级片毛片 | 日本黄色视频一区 |