又一本讓人醍醐灌頂的好書《架構探險:從零開始寫Java Web框架》
我最初是在《碼農翻身2》上了解到《架構探險:從零開始寫Java Web框架》這本書的,劉偉老師在書中提到,這本書在他早期學習時對他幫助很大。因此,我也購買了這本書來學習。
這本書主要介紹了如何自己編寫一個Web框架,使其達到類似于簡化版Spring的效果。作者盡量使用基礎工具包,并以通俗易懂的方式逐步展開內容。雖然該書于2015年出版,但其內容依然具有很高的實用價值。網絡上的一些評論稱它為“框架啟蒙書”,我認為這個評價非常準確。閱讀這本書確實讓人眼界大開,豁然開朗。我強烈推薦大家讀一讀。
主要思路和知識點梳理
1. 實現IOC特性
2. 實現統一請求轉發
3. 實現AOP特性
4. ThreadLocal的原理
上面的幾個知識點并不能代表此書給人的啟發,我強烈建議大家閱讀原書,以便更深入地理解和掌握這些概念。
目標:實現類似以下代碼的功能:
@Action
public class UserAction {
@Inject
private UserService userService;
}
核心步驟:
1).管理Bean:使用一個Map<Class<?>, Object> BEAN_MAP來管理所有的Bean。這涉及到類的掃描(如Class.forName)、注解的創建與獲取(如isAnnotationPresent),以及類反射(如newInstance和invoke)。
2).依賴注入:通過反射獲取含有指定注解的屬性,并通過反射初始化這些屬性(如field.setAccessible和field.set)。
目標:將請求URL與實際執行方法關聯起來。
核心步驟:
1).映射請求:將請求URL與實際執行方法存儲在一個Map中,通過反射獲取含有指定注解的方法(如getDeclaredMethods),并解析注解屬性(如method.getAnnotation)。
2).統一入口:DispatcherServlet作為統一入口,負責初始化BEAN_MAP和請求轉發Map,并通過反射調用實際方法(如method.invoke)。
目標:支持面向切面編程。
核心步驟:
1).動態代理技術:使用CGLIB庫進行動態代理。
2.)代理鏈:可能有多個切面,因此需要一個代理鏈(Chain)。如果鏈長度大于1,則繼續代理對象。
3).管理代理對象:將代理后的對象放入BEAN_MAP中。
功能:ThreadLocal用于存放線程局部變量,確保線程安全并隔離不同線程之間的數據。
應用場景:如果你的變量需要在不同的線程之間隔離,可以考慮使用ThreadLocal。

浙公網安備 33010602011771號