手寫Spring框架

在學習完Spring框架之後, 我們知道了 Spring容器, IOC, AOP, 事務管理, SpringMVC 這些Spring的核心內容, 也知道了它們底層實現的基本原理, 比如Spring容器就是個Map映射, IOC底層就是反射機制, AOP底層是動態代理, SpringMVC不就是對Servlet進行了下封裝嘛! 哈哈, 當然這些只是些皮毛, Spring除此之外還有更加複雜的設計, 但我們完全可以拋棄那些複雜的設計, 通過這些底層原理自己來寫個Spring框架. 寫完之後, 相信我們會對Spring框架有個更加深刻的理解.

前置知識

在自己動手寫Spring框架之前, 我們得先了解下Spring框架的核心知識點, 如下:

Spring IOC

Spring AOP

Spring事務管理

Spring MVC

Java反射機制

動態代理

Java註解

代碼下載

在開始動手寫博客之前, 我已經完成了自己的Spring框架, 並給它取名爲 handwritten-mvc-framwork, GitHub地址爲:
https://github.com/tyshawnlee/handwritten-mvc.git

大家可以 clone 到自己的IDE中, 然後跟着下面的博客我們一起學習.

項目導入後結構如下:

其中, handwritten-mvc-framwork 爲自己實現的Spring框架, handwritten-mvc-example 爲該框架的實例.

開始

(1) 建立框架

我們首先創建一個Maven項目, 取名爲 handwritten-mvc-framwork, 我們儘可能少的使用第三方依賴, 精簡後的依賴如下:

<dependencies>
    <!-- Servlet -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSP -->
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>jsp-api</artifactId>
        <version>2.2</version>
        <scope>provided</scope>
    </dependency>
    <!-- JSP標準標籤庫 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
        <scope>runtime</scope>
    </dependency>
    <!-- MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.33</version>
        <scope>runtime</scope>
    </dependency>
    <!--數據庫連接池-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>2.0.1</version>
    </dependency>
    <!--JDBC工具類庫-->
    <dependency>
        <groupId>commons-dbutils</groupId>
        <artifactId>commons-dbutils</artifactId>
        <version>1.6</version>
    </dependency>
    <!-- 日誌框架 -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.7</version>
    </dependency>
    <!-- 動態代理依賴 -->
    <dependency>
        <groupId>cglib</groupId>
        <artifactId>cglib</artifactId>
        <version>2.2.2</version>
    </dependency>
    <!-- 通用工具包 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.3.2</version>
    </dependency>
    <!--集合工具包-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.0</version>
    </dependency>
    <!--JSON依賴-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.49</version>
    </dependency>
</dependencies>

(2) 實現Spring容器和IOC

(3) 實現Spring MVC

(4) 實現Spring AOP和事務管理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章