跟我動手搭框架二之AOP實現

代理這裡主要用CGLIB代理,主要為實現前置通知,後置通知,環繞通知和異常通知

本篇主要承上啟下,承上根據IOC容易實現簡單AOP代理, 啟下,對將要實現的WEB模塊做一個規劃

文章中多有代碼,會在第三部分WEB容器實現,列出參考文檔及GITHUB源碼地址

目錄

  1. 編寫工具類

  2. 實現AOP

  3. web實現規劃

定義接口類並提供抽象空實現

抽象目的: 實現類只需要繼承要,實現的方法,即可

跟我動手搭框架二之AOP實現

一.定義CGLIBProxy工具

主要邏輯

  • 實現提供方法級代理,也就是對象不用實例化

  • 對實例進行代理

代碼更有說服力,直接看註釋

跟我動手搭框架二之AOP實現

跟我動手搭框架二之AOP實現

跟我動手搭框架二之AOP實現

跟我動手搭框架二之AOP實現

二. AOP實現

  • 實現方案

    當IOC容器掃描所有被@SmileComonpent標記的組件時候,會判斷是否被@SmileProxyAspect 註解修飾,

    如果有@SmileProxyAspect,則對實例化對象生成代理,注入

跟我動手搭框架二之AOP實現

三. web規劃

在對ioc容器及代理編寫完成後,就到重點我們要實現,對HTTP請求的解析和處理. 在此實現,要對項目做一個規劃,打一個草稿,這也是下一篇文章要講的東西。

項目基於Maven多模塊實現

3.1 包名

groupId:org.smileframework.boot

artifactId:

  • org.smileframework.web

  • org.smileframework.tool

  • org.smileframework.data

  • org.smileframework.ioc

3.2TOOLS部分

工欲善其事必先利其器,所以先寫我們將會遇到的工具類

  • 生成代理部分 CGLIB代理 org.smileframework.tool.proxy

  • 線程工廠及拒絕策略 org.smileframework.tool.threadpool

  • json及xml轉換 org.smileframework.tool.json | .xml

  • 數據流工具類org.smileframework.tool.io

  • 類加載器器 org.smileframework.tool.clazz

  • 文件讀取工具 org.smileframework.tool.io.SmileClassPathResource

3.3 IOC部分

在處理器中掃描註解可以知道項目具有哪些功能@SmileBootApplication 如果有改掃描器,就到子目錄中的使用@SmileComponent註解的都加入到默認的beans容器中然後開始實例化,如果發現Class中包括@InsertBean()將從bean容器中的對象,反射進去生成對象.發現方法中用@SmileBean修飾的同樣從ioc容器中獲取實例,並注入到該對象中,最終保存到IOC容器

3.4 合併WEB上下文

從bean容器中獲取到ExtApplicationContext

3.5 綁定Url和處理類

跟我動手搭框架二之AOP實現

3.6 AOP 攔截

在掃描時候找到切面類,讀取裡面的class類型,method 數組中是代理的方法

跟我動手搭框架二之AOP實現

獲取到這個註解,並獲取class類型,從bean容器中,獲取這個對象(A),根據Smile的方法把這個A對象,進行代理.

3.7 web容器使用Netty

基於事件,異步多線程處理,類似於SpringBoot2.0,Reactor反應堆式處理(在寫這篇文章的時候SpringBoot2.0還沒發佈,所以不是模仿他的實現,而是預見了)。

跟我動手搭框架二之AOP實現

跟我動手搭框架二之AOP實現


分享到:


相關文章: