Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >30个类手写Spring核心原理之环境准备(1)

30个类手写Spring核心原理之环境准备(1)

原创
作者头像
Tom弹架构
发布于 2021-12-09 07:38:42
发布于 2021-12-09 07:38:42
3160
举报
文章被收录于专栏:Tom弹架构Tom弹架构

本文节选自《Spring 5核心原理》

1 IDEA集成Lombok插件

1.1 安装插件

IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多。Lombok是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过Lombok注解减少getter、setter等方法的编写,在更改实体类时只需要修改属性即可,减少了很多重复代码的编写工作。

首先需要安装IntelliJ IDEA中的Lombok插件,打开IntelliJ IDEA后单击菜单栏中的File→Settings(如下图所示),或者使用快捷键Ctrl+Alt+S进入设置界面。

file
file

单击设置界面中的Plugins进行插件的安装,在右侧单击Browse repositories按钮,如下图所示。

file
file

然后在搜索界面中输入lombok可以查询到下方的Lombok Plugin,单击Lombok Plugin可在右侧看到Install按钮,单击该按钮便可开始安装,如下图所示。

file
file

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

file
file

在安装过程中有Downloading Plugins的提示,安装过程中进度条会变化。需要提醒的是,在安装过程中一定要保证网络连接可用且良好,否则可能会安装失败。

安装成功后可以看到下图右侧的Restart IntelliJ IDEA按钮,此时可先不操作,因为还有后续的配置工作。

file
file

回到Plugins,此时在下图右侧可以搜索到Lombok(而安装前搜索不到)。

file
file

1.2 配置注解处理器

在如下设置界面单击Build, Execution, Deployment→Compiler→Annotation Processors,然后在右侧勾选Enable annotation processing复选项即可。

file
file

1.3 使用插件

使用前需要说明的是,安装的插件只是一个调用,就像我们使用maven插件一样,本机需要安装maven才行。我们在使用Lombok前也需要在pom.xml文件中添加Lombok的依赖。

代码语言:txt
AI代码解释
复制
#托管的类扫描包路径#
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.16.10</version>
</dependency>

接下来编辑一个Config测试类,添加两个属性,最后在类上添加@Data属性,这个注解可以帮我们在.class文件中生成类中所有属性的get/set、equals、canEqual、hashCode、toString方法等,如下图所示。

file
file

我们还可以通过下面的方式查看Lombok生成的方法。在菜单栏中单击View→Tool Windows→Structure,便可以看到类中所有的方法,这些都是Lombok自动生成的,如下面两图所示。

file
file
file
file

2 从Servlet到ApplicationContext

在“用300行代码手写提炼Spring核心原理”一章中,我们已经了解Spring MVC的入口是DispatcherSerlvet,并实现了DispatcherServlet的init()方法,在init()方法中完成了IoC容器的初始化。而在使用Spring的过程中,见得最多的是ApplicationContext,似乎Spring托管的所有实例Bean都可以通过调用getBean()方法来获得。那么ApplicationContext又是从何而来的呢?从Spring源码中可以看到,DispatcherServlet的类图如下图所示。

file
file

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容器结构。

file
file

3 准备基础配置

在开始手写之前我们先做一个约定,所有的手写类都以GP开头,以区别于Spring框架中的原生类,方便对比理解。如DispatcherServlet在这个Mini版本中会命名为GPDispatcherServlet,所有的方法名尽量和原生Spring保持一致,可能有些参数列表会做一些微调,主要目的是理解设计思路。

3.1 application.properties配置

还是先从application.properties文件开始,用application.properties来代替application.xml,具体配置如下:

代码语言:txt
AI代码解释
复制
#托管的类扫描包路径#
scanPackage=com.gupaoedu.vip.spring.demo

3.2 pom.xml配置

接下来看pom.xml的配置,主要关注jar包依赖:

代码语言:txt
AI代码解释
复制
<properties>
    <!-- dependency versions -->
    <servlet.api.version>2.4</servlet.api.version>
</properties>

<dependencies>
    <!-- requied start -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>${servlet.api.version}</version>
        <scope>provided</scope>
    </dependency>
    <!-- requied end -->

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.16.10</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>

</dependencies>

3.3 web.xml配置

web.xml配置如下:

代码语言:txt
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee"
   xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
   version="2.4">
   <display-name>Gupao Spring Application</display-name>

   <servlet>
      <servlet-name>gupaomvc</servlet-name>
      <servlet-class>com.gupaoedu.vip.spring.formework.webmvc.servlet.GPDispatcherServlet </servlet-class>
      <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:application.properties</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>gupaomvc</servlet-name>
      <url-pattern>/*</url-pattern>
   </servlet-mapping>

</web-app>

3.4 GPDispatcherServlet

GPDispatcherServlet代码如下:

代码语言:txt
AI代码解释
复制
package com.gupaoedu.vip.spring.formework.webmvc.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
//Servlet只是作为一个MVC的启动入口
public class GPDispatcherServlet extends HttpServlet {
    @Override
    public void init(ServletConfig config) throws ServletException {
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }
}

用30个类手写一个Spring的准备阶段就到此为止,大家一定要记得自己动手操作。光看不练假把式。

本文为“Tom弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
30个类手写Spring核心原理之环境准备(1)
IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多。Lombok是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过Lombok注解减少getter、setter等方法的编写,在更改实体类时只需要修改属性即可,减少了很多重复代码的编写工作。首先需要安装IntelliJ IDEA中的Lombok插件,打开IntelliJ IDEA后单击菜单栏中的File→Settings(如下图所示),或者使用快捷键Ctrl+Alt+S进入设置界面。
Tom弹架构
2021/12/21
2930
30个类手写Spring核心原理之环境准备(1)
是时候掌握SpringMVC源码了-初探篇
  上篇文章我们通过手写分析了SpringMVC中的Controller的两种实现方式。接下来我们来看看在SpringMVC中具体是如何使用的。
用户4919348
2022/11/12
2450
是时候掌握SpringMVC源码了-初探篇
自己手写一个 SpringMVC 框架
前端框架很多,但没有一个框架称霸,后端框架现在Spring已经完成大一统.所以学习Spring是Java程序员的必修课. Spring 框架对于 Java 后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看 Spring 的源码,你将会失去一次和大师学习的机会:它的代码规范,设计思想很值得学习。我们程序员大部分人都是野路子,不懂什么叫代码规范。写了一个月的代码,最后还得其他老司机花3天时间重构,相信大部分老司机都很头疼看新手的代码。 废话不多说,我们进入
java思维导图
2018/03/15
8750
自己手写一个 SpringMVC 框架
从 0 开始手写一个 Spring MVC 框架,向高手进阶!
Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看Spring的源码,你将会失去一次和大师学习的机会:它的代码规范,设计思想很值得学习。
Java技术栈
2018/08/17
1.3K0
从 0 开始手写一个 Spring MVC 框架,向高手进阶!
IDEA 新建 Spring MVC 工程项目与 SpringMVC 运行流程
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ajianyingxiaoqinghan/article/details/80727200
剑影啸清寒
2019/05/29
3.8K0
[Spring] 30个类手写 Spring Mini 版本系列(一)
为了更深入的了解 Spring 的实现原理和设计思想,一直打算出个系列文章,从零开始重新学习 Spring。有兴趣的小伙伴可以持续关注更新。
架构探险之道
2020/04/26
5180
SpringMVC——DispatcherServlet的IoC容器(Web应用的IoC容器的子容器)创建过程
在上一篇《Spring——Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)》中说到了Web应用中的IoC容器创建过程.这一篇主要讲SpringMVC的核心DispatcherServlet. 从web.xml中简要回顾一下WebApplicationContext根应用上下文的创建过程.具体过程详见上篇博客. 1   <!--WebApplicationContext配置参数--> 2   <context-param> 3   <param-name
用户1148394
2018/01/12
1.1K0
SpringMVC——DispatcherServlet的IoC容器(Web应用的IoC容器的子容器)创建过程
SpringMVC(二):SpringMVC项目搭建
创建好目录后,选中目录,右击 mark directory as 选择对应目录类型即可
Lansonli
2022/12/27
6630
SpringMVC(二):SpringMVC项目搭建
使用IDEA整合spring4+spring mvc+hibernate
注意:tomcat要选择tomcat7,否则将请求方法进行转换的过滤器就没法生效,其次在配置扫描注解的时候,spring mvc的配置文件中必须配置controller包的自动扫描,否则会出现no mapping found错误
我是李超人
2020/08/21
4510
使用IDEA整合spring4+spring mvc+hibernate
IDEA maven+spring mvc简单项目
修改项目结构file->project structure 将java目录设置为sources,点击java->选中sources,可以看到右侧source folders多了一个/src/main/java
我是李超人
2020/08/21
3910
IDEA maven+spring mvc简单项目
SpringMVC4环境搭建实例详解(步步为赢)
Spring WEB MVC框架提供了一个MVC(model-view-controller)模型-视图-控制器的结构和组件,利用它可以开发更灵活、松耦合的web应用。MVC模式使得整个服务应用的各部分(控制逻辑、业务逻辑、UI界面展示)分离开来,使它们之间的耦合性更低。
青山师
2023/05/04
2680
SpringMVC4环境搭建实例详解(步步为赢)
_Spring MVC简介附入门案例
接下来我们写一个SpringMVC的入门案例,此时我们新建一个模块即可,首先使用maven创建web项目,补齐包结构 ,
会洗碗的CV工程师
2023/11/18
1660
_Spring MVC简介附入门案例
为什么都说DispatcherServlet是Spring MVC的核心呢?
本文将分析SpringMVC的核心分发器DispatcherServlet的初始化过程以及处理请求的过程,让读者了解这个入口Servlet的作用。
Java编程指南
2020/03/27
1.5K0
Spring中毒太深,离开了Spring,我居然连最基本的接口都不会写了¯\_(ツ)_/¯
众所周知,Java必学的框架其中就是SSM,Spring已经融入了每个开发人员的生活,成为了不可或缺的一份子。
BlueSocks
2022/03/28
2010
Spring中毒太深,离开了Spring,我居然连最基本的接口都不会写了¯\_(ツ)_/¯
搭建spring+springmvc项目
新建一个Maven项目 填写项目名 引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.or
阿超
2022/08/16
1660
搭建spring+springmvc项目
SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)
之前整理了一下新版本的 SSM 三大框架,这篇文章是关于它的整合过程和项目源码,版本号分别为:Spring 5.2.2.RELEASE、SpringMVC 5.2.2.RELEASE、MyBatis 3.5.2。
程序员十三
2020/04/15
1K0
SSM 三大框架系列:Spring 5 + Spring MVC 5 + MyBatis 3.5 整合(附源码)
SpringMVC 初始化流程分析
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
江南一点雨
2021/03/16
3790
Spring MVC 开发环境搭建 原
第一步:pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion>
南郭先生
2018/08/14
3560
用300行代码手写提炼Spring核心原理
为了解析方便,我们用application.properties来代替application.xml文件,具体配置内容如下:
Tom弹架构
2022/04/25
2560
用300行代码手写提炼Spring核心原理
使用SpringMVC写一个简单的跳转界面
1.目录 2.在pom.xml中配置依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/
2020/10/23
6650
使用SpringMVC写一个简单的跳转界面
推荐阅读
相关推荐
30个类手写Spring核心原理之环境准备(1)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文