文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-02 13:04

关注

单击设置界面中的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.  
  3.     org.projectlombok 
  4.     lombok 
  5.     1.16.10 
  6.  

接下来编辑一个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.  
  2.     -- dependency versions --> 
  3.     2.4 
  4.  
  5.  
  6.  
  7.     -- requied start --> 
  8.      
  9.         javax.servlet 
  10.         servlet-api 
  11.         ${servlet.api.version} 
  12.         provided 
  13.      
  14.     -- requied end --> 
  15.  
  16.      
  17.         org.projectlombok 
  18.         lombok 
  19.         1.16.10 
  20.      
  21.  
  22.      
  23.         org.slf4j 
  24.         slf4j-api 
  25.         1.7.25 
  26.      
  27.  
  28.      
  29.         ch.qos.logback 
  30.         logback-classic 
  31.         1.2.3 
  32.      
  33.  
  34.  

3.3 web.xml配置

web.xml配置如下:

  1. "1.0" encoding="UTF-8"?> 
  2. "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.    name>Gupao Spring Applicationname
  8.  
  9.     
  10.       name>gupaomvcname
  11.       com.gupaoedu.vip.spring.formework.webmvc.servlet.GPDispatcherServlet  
  12.        
  13.          name>contextConfigLocationname
  14.          classpath:application.properties 
  15.        
  16.       <load-on-startup>1load-on-startup> 
  17.     
  18.  
  19.     
  20.       name>gupaomvcname
  21.       /* 
  22.     
  23.  
  24.  

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弹架构内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯