成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

30個類手寫Spring核心原理之環境準備

開發 前端
首先需要安裝IntelliJ IDEA中的Lombok插件,打開IntelliJ IDEA后單擊菜單欄中的File→Settings(如下圖所示),或者使用快捷鍵Ctrl+Alt+S進入設置界面。

[[440219]]

1 IDEA集成Lombok插件

1.1 安裝插件

IntelliJ IDEA是一款非常優秀的集成開發工具,功能強大,而且插件眾多。Lombok是開源的代碼生成庫,是一款非常實用的小工具,我們在編輯實體類時可以通過Lombok注解減少getter、setter等方法的編寫,在更改實體類時只需要修改屬性即可,減少了很多重復代碼的編寫工作。首先需要安裝IntelliJ IDEA中的Lombok插件,打開IntelliJ IDEA后單擊菜單欄中的File→Settings(如下圖所示),或者使用快捷鍵Ctrl+Alt+S進入設置界面。

單擊設置界面中的Plugins進行插件的安裝,在右側單擊Browse repositories按鈕,如下圖所示。

然后在搜索界面中輸入lombok可以查詢到下方的Lombok Plugin,單擊Lombok Plugin可在右側看到Install按鈕,單擊該按鈕便可開始安裝,如下圖所示。

我們在如下安裝界面可以看到Lombok支持的所有注解。

在安裝過程中有Downloading Plugins的提示,安裝過程中進度條會變化。需要提醒的是,在安裝過程中一定要保證網絡連接可用且良好,否則可能會安裝失敗。安裝成功后可以看到下圖右側的Restart IntelliJ IDEA按鈕,此時可先不操作,因為還有后續的配置工作。

回到Plugins,此時在下圖右側可以搜索到Lombok(而安裝前搜索不到)。

1.2 配置注解處理器

在如下設置界面單擊Build, Execution, Deployment→Compiler→Annotation Processors,然后在右側勾選Enable annotation processing復選項即可。

1.3 使用插件

使用前需要說明的是,安裝的插件只是一個調用,就像我們使用maven插件一樣,本機需要安裝maven才行。我們在使用Lombok前也需要在pom.xml文件中添加Lombok的依賴。

  1. #托管的類掃描包路徑# 
  2. <dependency> 
  3.     <groupId>org.projectlombok</groupId> 
  4.     <artifactId>lombok</artifactId> 
  5.     <version>1.16.10</version> 
  6. </dependency> 

接下來編輯一個Config測試類,添加兩個屬性,最后在類上添加@Data屬性,這個注解可以幫我們在.class文件中生成類中所有屬性的get/set、equals、canEqual、hashCode、toString方法等,如下圖所示。

我們還可以通過下面的方式查看Lombok生成的方法。在菜單欄中單擊View→Tool Windows→Structure,便可以看到類中所有的方法,這些都是Lombok自動生成的,如下面兩圖所示。

2 從Servlet到ApplicationContext

在“用300行代碼手寫提煉Spring核心原理”一章中,我們已經了解Spring MVC的入口是DispatcherSerlvet,并實現了DispatcherServlet的init()方法,在init()方法中完成了IoC容器的初始化。而在使用Spring的過程中,見得最多的是ApplicationContext,似乎Spring托管的所有實例Bean都可以通過調用getBean()方法來獲得。那么ApplicationContext又是從何而來的呢?從Spring源碼中可以看到,DispatcherServlet的類圖如下圖所示。

DispatcherServlet繼承了FrameworkServlet,FrameworkServlet繼承了HttpServletBean,HttpServletBean繼承了HttpServlet。在HttpServletBean的init()方法中調用了FrameworkServlet的initServletBean()方法,在initServletBean()方法中初始化WebApplicationContext實例。在initServletBean()方法中調用了DispatcherServlet重寫的onRefresh()方法。在DispatcherServlet的onRefresh()方法中又調用了initStrategies()方法,初始化Spring MVC的九大組件。其實,通過上面復雜的調用關系可以得出一個結論:在Servlet的init()方法中初始化了IoC容器和Spring MVC所依賴的九大組件。在手寫之前先將框架類關系畫出來,如下圖所示,順便也回顧一下我們之前講過的IoC容器結構。

3 準備基礎配置

在開始手寫之前我們先做一個約定,所有的手寫類都以GP開頭,以區別于Spring框架中的原生類,方便對比理解。如DispatcherServlet在這個Mini版本中會命名為GPDispatcherServlet,所有的方法名盡量和原生Spring保持一致,可能有些參數列表會做一些微調,主要目的是理解設計思路。

3.1 application.properties配置

還是先從application.properties文件開始,用application.properties來代替application.xml,具體配置如下:

  1. #托管的類掃描包路徑# 
  2. scanPackage=com.gupaoedu.vip.spring.demo 

3.2 pom.xml配置

接下來看pom.xml的配置,主要關注jar包依賴:

  1. <properties> 
  2.     <!-- dependency versions --> 
  3.     <servlet.api.version>2.4</servlet.api.version> 
  4. </properties> 
  5.  
  6. <dependencies> 
  7.     <!-- requied start --> 
  8.     <dependency> 
  9.         <groupId>javax.servlet</groupId> 
  10.         <artifactId>servlet-api</artifactId> 
  11.         <version>${servlet.api.version}</version> 
  12.         <scope>provided</scope> 
  13.     </dependency> 
  14.     <!-- requied end --> 
  15.  
  16.     <dependency> 
  17.         <groupId>org.projectlombok</groupId> 
  18.         <artifactId>lombok</artifactId> 
  19.         <version>1.16.10</version> 
  20.     </dependency> 
  21.  
  22.     <dependency> 
  23.         <groupId>org.slf4j</groupId> 
  24.         <artifactId>slf4j-api</artifactId> 
  25.         <version>1.7.25</version> 
  26.     </dependency> 
  27.  
  28.     <dependency> 
  29.         <groupId>ch.qos.logback</groupId> 
  30.         <artifactId>logback-classic</artifactId> 
  31.         <version>1.2.3</version> 
  32.     </dependency> 
  33.  
  34. </dependencies> 

3.3 web.xml配置

web.xml配置如下:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" 
  4.    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
  5.    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
  6.    version="2.4"
  7.    <display-name>Gupao Spring Application</display-name
  8.  
  9.    <servlet> 
  10.       <servlet-name>gupaomvc</servlet-name
  11.       <servlet-class>com.gupaoedu.vip.spring.formework.webmvc.servlet.GPDispatcherServlet </servlet-class> 
  12.       <init-param> 
  13.          <param-name>contextConfigLocation</param-name
  14.          <param-value>classpath:application.properties</param-value> 
  15.       </init-param> 
  16.       <load-on-startup>1</load-on-startup> 
  17.    </servlet> 
  18.  
  19.    <servlet-mapping> 
  20.       <servlet-name>gupaomvc</servlet-name
  21.       <url-pattern>/*</url-pattern> 
  22.    </servlet-mapping> 
  23.  
  24. </web-app> 

3.4 GPDispatcherServlet

GPDispatcherServlet代碼如下:

  1. package com.gupaoedu.vip.spring.formework.webmvc.servlet; 
  2. import javax.servlet.ServletConfig; 
  3. import javax.servlet.ServletException; 
  4. import javax.servlet.http.HttpServlet; 
  5. import javax.servlet.http.HttpServletRequest; 
  6. import javax.servlet.http.HttpServletResponse; 
  7. import java.io.IOException; 
  8. //Servlet只是作為一個MVC的啟動入口 
  9. public class GPDispatcherServlet extends HttpServlet { 
  10.     @Override 
  11.     public void init(ServletConfig config) throws ServletException { 
  12.     } 
  13.     @Override 
  14.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  15.         this.doPost(req,resp); 
  16.     } 
  17.     @Override 
  18.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  19.     } 

 用30個類手寫一個Spring的準備階段就到此為止,大家一定要記得自己動手操作。光看不練假把式。

 

責任編輯:姜華 來源: Tom彈架構
相關推薦

2021-12-27 08:27:17

SpringMVC面試

2021-12-15 09:17:12

Spring依賴注入面試題

2020-11-02 09:35:04

ReactHook

2020-12-03 08:14:45

Axios核心Promise

2022-01-05 08:53:13

Spring原理分析MVC

2020-05-21 13:25:43

Spring組件架構

2020-11-24 07:48:32

React

2021-08-10 18:36:02

Express原理面試

2020-10-20 09:12:57

axios核心原理

2020-10-10 06:32:43

IDEA插件環境

2024-12-04 10:19:49

2022-08-27 13:49:36

ES7promiseresolve

2022-01-26 15:20:00

配置微服務架構

2022-02-09 07:52:36

GolangGo語言

2011-07-11 18:02:50

java

2011-07-11 18:10:28

java

2022-11-15 08:10:23

SpringMyBatis底層

2020-10-23 09:26:57

React-Redux

2021-09-10 15:16:19

Kubernetes核心組件運維

2021-10-31 19:39:11

注解Spring 核心類
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91观看| 日本免费一区二区三区四区 | 国产精品日韩欧美一区二区三区 | h视频在线免费观看 | 嫩草视频在线看 | 国产 欧美 日韩 一区 | 久久久久无码国产精品一区 | 日韩欧美黄色 | 日本爱爱 | 欧美区日韩区 | 一区二区三区在线免费观看视频 | 一级黄色毛片a | 日韩最新网址 | 一区二区三区精品视频 | 亚洲视频二区 | 久久国产成人午夜av影院武则天 | 紧缚调教一区二区三区视频 | 男人的天堂亚洲 | 日韩国产中文字幕 | 久久精品99| 欧美成人免费在线视频 | a亚洲精品 | 91麻豆精品国产91久久久久久久久 | 一区二区福利视频 | 在线播放中文 | av在线视| 国产日韩中文字幕 | 在线免费看91 | 在线观看成人免费视频 | 久久精品视频播放 | 日日骚网 | 日本国产精品视频 | 国产精品视频一二三区 | 久久精品视频网站 | 国产免费一区二区 | 日韩国产一区二区 | 中文字幕亚洲国产 | 国产在线精品一区二区三区 | 国内精品视频在线观看 | 成人免费淫片aa视频免费 | 一区二区三区高清在线观看 |