代理這裡主要用CGLIB代理,主要為實現前置通知,後置通知,環繞通知和異常通知
本篇主要承上啟下,承上根據IOC容易實現簡單AOP代理, 啟下,對將要實現的WEB模塊做一個規劃
文章中多有代碼,會在第三部分WEB容器實現,列出參考文檔及GITHUB源碼地址
目錄
編寫工具類
實現AOP
web實現規劃
定義接口類並提供抽象空實現
抽象目的: 實現類只需要繼承要,實現的方法,即可
一.定義CGLIBProxy工具
主要邏輯
實現提供方法級代理,也就是對象不用實例化
對實例進行代理
代碼更有說服力,直接看註釋
二. AOP實現
實現方案
當IOC容器掃描所有被@SmileComonpent標記的組件時候,會判斷是否被@SmileProxyAspect 註解修飾,
如果有@SmileProxyAspect,則對實例化對象生成代理,注入
三. 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和處理類
3.6 AOP 攔截
在掃描時候找到切面類,讀取裡面的class類型,method 數組中是代理的方法
獲取到這個註解,並獲取class類型,從bean容器中,獲取這個對象(A),根據Smile的方法把這個A對象,進行代理.
3.7 web容器使用Netty
基於事件,異步多線程處理,類似於SpringBoot2.0,Reactor反應堆式處理(在寫這篇文章的時候SpringBoot2.0還沒發佈,所以不是模仿他的實現,而是預見了)。
閱讀更多 東方既白 的文章