1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          aware的用法(實現Aware接口的原理及使用方法是什么)

          來源:互聯網轉載 時間:2024-05-13 11:58:00

          前言

          spring 對bean的創建過程做了很完整的封裝。但是提供了非常多的擴展接口,供我們使用。這一節主要是實現spring提供的獲取 beanFactory,classLoader 等屬性的能力。 在我們開發過程中我們經常會使用到 ApplicationContextAware接口,來獲取到 spring的上下文。來完成對bean的獲取,當拿到了BeanFactory以后,我們能做的東西就多起來了,我們可以通過的spring工廠獲取到我們需要的類,等等。

          設計&實現

          spring 提供Aware接口機制,給外部的類提供獲取spring內部信息的能力。目前spring常用的Aware接口有

          Aware 感知接口

          Aware接口,只做標記。類似于Serializable序列化接口,僅標記這個類可以序列化。Aware 僅表示實現類具有在獲取springbean創建過程中的一些內部屬性的能力。

          /***只做標記*spring容器感知接口*/publicinterfaceAware{}

          提供具體能力的接口

          ApplicationContextAware 提供獲取 applicationContext 的能力

          publicinterfaceApplicationContextAwareextendsAware{voidsetApplicationContext(ApplicationContextapplicationContext);}

          BeanClassLoaderAware提供獲取 classLoader 的能力

          publicinterfaceBeanClassLoaderAwareextendsAware{voidsetBeanClassLoader(ClassLoaderclassLoader);}

          BeanFactoryAware 提供獲取 BeanFactory 的能力

          publicinterfaceBeanFactoryAwareextendsAware{voidsetBeanFactory(BeanFactorybeanFactory)throwsBeansException;}

          BeanNameAware 提供獲取 beanName 的能力

          publicinterfaceBeanNameAwareextendsAware{voidsetBeanName(StringbeanName);}

          他們都在創建bean完成后,在添加bean的擴展屬性時,給這個bean加上特定的能力

          @OverrideprotectedObjectcreateBean(StringbeanName,BeanDefinitionbeanDefinition,Object[]args){Objectbean=null;try{bean=createBeanInstance(beanDefinition,beanName,args);//注入屬性applyPropertyValues(beanName,bean,beanDefinition);//提供給外部的擴展包裝,執行Bean的初始化方法和BeanPostProcessor的前置和后置處理方法bean=initializeBean(beanName,bean,beanDefinition);}catch(Exceptione){thrownewRuntimeException("beancreateerror!",e);}//注冊實現了DisposableBean接口的Bean對象registerDisposableBeanIfNecessary(beanName,bean,beanDefinition);registerSingleton(beanName,bean);returnbean;}privateObjectinitializeBean(StringbeanName,Objectbean,BeanDefinitionbeanDefinition)throwsBeansException{if(beaninstanceofAware){if(beaninstanceofBeanFactoryAware){((BeanFactoryAware)bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);}if(beaninstanceofApplicationContextAware){((ApplicationContextAware)bean).setApplicationContext(this);}if(beaninstanceofBeanClassLoaderAware){((BeanClassLoaderAware)bean).setBeanClassLoader(getClassLoader());}if(beaninstanceofBeanNameAware){((BeanNameAware)bean).setBeanName(beanName);}}.....}

          測試

          實現 需要添加特定能力的 Aware接口,實現他們的方法

          publicclassUserServiceimplementsInitializingBean,DisposableBean,ApplicationContextAware,BeanClassLoaderAware,BeanNameAware{privateApplicationContextapplicationContext;privateClassLoaderclassLoader;@OverridepublicvoidsetBeanClassLoader(ClassLoaderclassLoader){this.classLoader=classLoader;}@OverridepublicvoidsetApplicationContext(ApplicationContextapplicationContext){this.applicationContext=applicationContext;}}@TestpublicvoidtestContext1()throwsBeansException{ClassPathXmlApplicationContextapplicationContext=newClassPathXmlApplicationContext("classpath:spring.xml");applicationContext.registerShutdownHook();UserServiceuserService=(UserService)applicationContext.getBean("userService");System.out.println(userService.say());System.out.println(userService.getApplicationContext());System.out.println(userService.getClassLoader());System.out.println(userService.getBeanName());}

          到此,相信大家對“實現Aware接口的原理及使用方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是本站網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

          標簽:aware的用法-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          在經濟新聞中我們有時候會看到硬著陸和軟著陸這樣的詞匯,那么你知道經濟硬著陸和軟著陸的區別是什么嗎?經濟硬著陸和軟著陸的區別?我們可以類比飛行器,飛行器的硬著陸會導致其被損壞,而軟著陸則可以導致其完后或者只有輕微的損害,在經濟中也是如此:【1】原因不同:硬著陸是因為經濟政策過緊所導致的,經濟會出現出較大程度的動蕩;軟著陸則是因為經濟政策得當,使得過快增長的經濟速度平穩的下降到一個合適的比例,而沒有出...

          炒黃金賺錢嗎?答案是肯定的。知道了黃金長期以來被人們作為投資工具,知道了黃金直到現在在位置,仍然有很大的投資價值我們不需要懷疑在黃金投機的賺錢能力當然我們要確定我們是在正規的黃金交易平臺上交易,剩下的只要操作得當就可以了。即使普通人也可以在黃金,炒股賺錢,但具體盈利情況取決于不同人的實際操作。炒黃金賺錢的幾率有多大?黃金市場如戰場,資金如士兵,而投資者就是這場交易中的指揮官,指揮官指導這場沒有硝煙...

          【資料圖】在生活中,很多人都不知道國家圖書館開放時間是什么意思,其實他的意思是非常簡單的,下面就是小編搜索到的國家圖書館開放時間相關的一些知識,我們一起來學習下吧!1、總館南區:周一至周日9:00-17:00,總館北區:周一至周五9:00--21:00,周六至周日9:00--17:00,少年兒童館:周一至周日9:00--17:00,古籍館:周一至周五9:00--17:00。2、中國國家圖書館前身是...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>