最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring高階用法之自定義業(yè)務(wù)對象組件化

 更新時間:2019年03月20日 10:57:23   作者:seeing  
這篇文章主要介紹了Spring高階用法之自定義業(yè)務(wù)對象組件化,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

若干年前在使用SpringMVC的時候,發(fā)現(xiàn)springMVC可以把HttpSession,HttpRequest組件化注入:

@Autowired
HttpSession session;

@Autowired
HttpRequest httpRequest;

于是花了30分鐘追蹤了相關(guān)的源代碼徹底摸清其原理,并且決定將用戶(User/Principle)也組件化(盡管當(dāng)時工作處于極其忙碌的狀態(tài),也忍不住去研究)。

方法如下:

1. 定義IPrincipal(IUser)接口

interface IPrincipal extends Serializable {
    IPrincipal get()
  }

2. 實現(xiàn)PrincipalObjectFactory

 class PrincipalObjectFactory implements ObjectFactory<IPrincipal>, Serializable {
  @Override
  IPrincipal getObject() {
    def requestAttr = RequestContextHolder.currentRequestAttributes()
    def request = requestAttr.getRequest()
    def p = new PrincipalHelper(request).get()

    new IPrincipal() {
      @Override
      IPrincipal get() {
        p
      }
    }
  }

}

3. 在spring的上下文中注冊依賴處理器

beanFactory.registerResolvableDependency(IPrincipal, new PrincipalObjectFactory())

只需要以上步驟,即可使用@Autowired在業(yè)務(wù)代碼中注入IPrincipal(IUser),并且保證其線程安全。

原理:
閱讀spring源碼會發(fā)現(xiàn),spring在注入接口時如果發(fā)現(xiàn)沒有接口的實現(xiàn)類,就會從ResolvableDependency中尋找相關(guān)的依賴解決器。

如果注冊了相關(guān)的依賴解決器,會給此接口注入一個代理類,這個代理類的target就是ObjectFactory#getObject,在這里就可實現(xiàn)你的IPrincipal(IUser)獲取了。

總結(jié)

1 使用這個方式將IPrincipal(IUser)組件化,而不是通過工具類的方式去獲取。這樣的方式充分體現(xiàn)了spring的依賴注入的思想,并且系統(tǒng)耦合性也降低不少。

2 即使在spring上下文中注入ObjectFactory,spring并不會自動注冊,需要手動注冊。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 探討Java驗證碼制作(下篇)

    探討Java驗證碼制作(下篇)

    這篇文章主要介紹了探討Java驗證碼制作(下篇)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • Java利用ElasticSearch實現(xiàn)自動補全功能

    Java利用ElasticSearch實現(xiàn)自動補全功能

    這篇文章主要為大家詳細介紹了Java如何利用ElasticSearch實現(xiàn)跟谷歌和百度類似的下拉補全提示功能,文中的示例代碼講解詳細,需要的可以參考一下
    2023-08-08
  • 一文給你通俗易懂的講解Java異常

    一文給你通俗易懂的講解Java異常

    這篇文章主要給大家介紹了關(guān)于Java異常的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • JVM 方法調(diào)用之動態(tài)分派(詳解)

    JVM 方法調(diào)用之動態(tài)分派(詳解)

    下面小編就為大家?guī)硪黄狫VM 方法調(diào)用之動態(tài)分派(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • java正則表達式學(xué)習(xí)筆記之命名捕獲

    java正則表達式學(xué)習(xí)筆記之命名捕獲

    這篇文章主要為大家詳細介紹了java正則表達式中的命名捕獲,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解

    Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解

    這篇文章主要為大家介紹了Activiti7通過代碼動態(tài)生成工作流實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Java中Console對象實例代碼

    Java中Console對象實例代碼

    這篇文章主要介紹了Java中Console對象實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 使用SpringBoot中的Schedule定時發(fā)送郵件的方法

    使用SpringBoot中的Schedule定時發(fā)送郵件的方法

    在SpringBoot中,你可以使用@Scheduled注解來創(chuàng)建定時任務(wù),@Scheduled注解可以應(yīng)用于方法上,表示這個方法是一個定時任務(wù),可以根據(jù)指定的時間間隔或固定時間執(zhí)行,本文就給大家介紹一下如何使用SpringBoot中的Schedule定時發(fā)送郵件,需要的朋友可以參考下
    2023-08-08
  • java創(chuàng)建多級目錄文件的實例講解

    java創(chuàng)建多級目錄文件的實例講解

    下面小編就為大家分享一篇java創(chuàng)建多級目錄文件的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • SpringBoot不讀取bootstrap.yml/properties文件問題

    SpringBoot不讀取bootstrap.yml/properties文件問題

    這篇文章主要介紹了SpringBoot不讀取bootstrap.yml/properties文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

文登市| 二手房| 荣昌县| 荔浦县| 渭南市| 蒙山县| 错那县| 新余市| 若尔盖县| 突泉县| 于都县| 永福县| 钦州市| 桐城市| 南丹县| 乐陵市| 琼中| 枣阳市| 江孜县| 临安市| 囊谦县| 滦南县| 田东县| 天津市| 宁明县| 淄博市| 青海省| 盐城市| 沂源县| 临湘市| 邵阳县| 尖扎县| 内丘县| 视频| 财经| 新和县| 东台市| 通道| 屏边| 横山县| 博乐市|