@Resource從spring容器中獲取例項注入到類的成員變數中

zhifeng687發表於2015-12-22


 1、在spring的配置檔案中匯入名稱空間

         xmlns:context="http://www.springframework.org/schema/context"
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-2.5.xsd

   2、引入註解解析器

        <context:annotation-config></context:annotation-config>

   3、在spring的配置檔案中把bean引入進來

   4、在一個類的屬性上加

            @Resource(name="student_annotation")
            private Student student;
         從該註解本身
               @Target({TYPE, FIELD, METHOD})
               @Retention(RUNTIME)
               public @interface Resource {
                  String name() default "";
               }
           1、該註解可以用於屬性上或者方法上,但是一般用於屬性上 
           2、該註解有一個屬性name,預設值為""

   5、分析整個過程

        1、當啟動spring容器的時候,spring容器載入配置檔案,例項化所有的bean,或者掃描註解,將帶@Service註解的類例項化,註冊到spring容器中;
        2、如果bean的屬性或者方法上加有@Resource,或者類(這個類不單單指帶@Service註解的類,任何一個類都可以在屬性或者方法上加有@Resource的屬性或者方法上加有@Resource,找到@Resource註解以後(註解可能是@Resource(name="。。。")或者@Resource,有name屬性或者沒有),判斷該註解name的屬性是否為""(name沒有寫)
              如果沒有寫name屬性,則會讓屬性的名稱的值和spring中ID的值做匹配,如果匹配成功則賦值
                                        如果匹配不成功,則會按照型別進行匹配,如果匹配不成功,則報錯
              如果有name屬性,則會按照name屬性的值和spring的bean中ID進行匹配,或者與@Service註解的類中@Service("serviceName")的serviceName進行匹配,如果匹配成功,則賦值,不成功則報錯

ps:類的成員變數,與上文提到的類的屬性或者方法,是一個意思



相關文章