SpringBoot实现原理

2023-11-19

一、什么是SpringBoot?

SpringBoot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器(Jetty和Tomcat),最终以java应用程序进行执行。

二、SpringBoot核心原理

1> 基于SpringMVC无配置文件(纯Java)完全注解化+内置tomcat-embed-core实现SpringBoot框架,Main函数启动。

2> SpringBoot核心快速整合第三方框架原理:Maven继承依赖关系。

三、SpringBoot重点

3.1:快速整合第三方依赖:maven子父依赖关系。

springboot 通过引用spring-boot-starter-web依赖,整合SpingMVC框架。只需要引用一个jar包,就可以通过Maven继承的方式引用到Spring-aop,Spring-beans,Spring-core,Spring-web等相关依赖。

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.0.0.RELEASE</version>
</parent>
<dependencies>

	<!-- SpringBoot 整合SpringMVC -->
	<!-- 为什么我们映入spring-boot-starter-web 能够帮我整合Spring环境 原理通过Maven子父         工程 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>

3.2:完全无配置文件(采用注解化)

springboot没有配置文件,如何进行初始化?

在没有web.xml配置文件的情况,通过java代码操作整个SpringMVC的初始化过程,java代码最终会生成class文件,内置Tomcat就会加载这些class文件,当所有程序加载完成后,项目就可以访问了

以前的web项目,通过Web.xml配置文件加载整个项目流程。

web.xml

web1.xml

没有web.xml文件,那么Tomcat是如何启动(注解在什么时候产生)?

在Spring3.0以上(提供注解,在这个版本以后,有了巨大改变,完全不需要任何配置文件加载项目)。

SpringMVC内置注解加载整个SpringMVC容器。相当于使用Java代码编写SpringMVC初始化。

package com.springboot.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/**
 * springmvc 配置信息
 * 
 * @EnableWebMvc 开启springmvc 功能<br>
 * @作者说明 LongCode <br>
 */
@Configuration
@EnableWebMvc	//此注解就是开启SpringMVC容器
@ComponentScan(basePackages = { "com.springboot.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {

	// springboot 整合jsp 最好是war
	// 需要配置视图转换器
	// 创建SpringMVC视图解析器
	@Bean
	public ViewResolver viewResolver() {
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		viewResolver.setPrefix("/WEB-INF/views/");
		viewResolver.setSuffix(".jsp");
		// 可以在JSP页面中通过${}访问beans
		viewResolver.setExposeContextBeansAsAttributes(true);
		return viewResolver;
	}

}

3.3:内置Http服务器

java代码创建Tomcat容器,加载class文件。 

package com.springboot;

import java.io.File;

import javax.servlet.ServletException;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;

public class AppTomcat {

	public static void main(String[] args) throws ServletException, LifecycleException {
		// 使用Java内置Tomcat运行SpringMVC框架 原理:tomcat加载到
		// springmvc注解启动方式,就会创建springmvc容器
		start();
	}

	public static void start() throws ServletException, LifecycleException {

		// 创建Tomcat容器
		Tomcat tomcatServer = new Tomcat();
		// 端口号设置
		tomcatServer.setPort(9090);
		// 读取项目路径 加载静态资源
		StandardContext ctx = (StandardContext) tomcatServer.addWebapp("/", new File("src/main").getAbsolutePath());
		// 禁止重新载入
		ctx.setReloadable(false);
		// class文件读取地址
		File additionWebInfClasses = new File("target/classes");
		// 创建WebRoot
		WebResourceRoot resources = new StandardRoot(ctx);
		// tomcat内部读取Class执行
		resources.addPreResources(
				new DirResourceSet(resources, "/WEB-INF/classes", additionWebInfClasses.getAbsolutePath(), "/"));
		tomcatServer.start();
		// 异步等待请求执行
		tomcatServer.getServer().await();

	}

}

springBoot框架流程:先创建Tomcat容器,然后加载class文件,加载过程中如果发现有java代码编写的SpringMVC初始化,就会创建SpringMVC容器。所有程序执行完毕后,项目就可以访问了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot实现原理 的相关文章

随机推荐

  • 百度广告联盟代码优化

    再分享一下我老师大神的人工智能教程吧 零基础 通俗易懂 风趣幽默 还带黄段子 希望你也加入到我们人工智能的队伍中来 https blog csdn net jiangjunshow
  • 关于Delphi的时间格式,图片处理的一些常用操作

    1 delphi 将字符串转换为时间 可以通过TFormatSettings 类来设置 FSetting ShortDateFormat yyyy MM dd FSetting DateSeparator DateTime1 StrToDa
  • vue若依前端项目搭建

    1 项目搭建 首先进入到你需要创建的项目目录下面 然后输入命令vue create 创建项目 接下来选择手动搭建 然后把下面图片中的内容选上 再然后继续配置一些参数信息 接下来运行npm run serve项目就启动起来了 2 配置登录界面
  • 【学习】若依源码(前后端分离版)之 “ 上传图片功能实现”

    大型纪录片 学习若依源码 前后端分离版 之 上传图片功能实现 前言 前端部分 后端部分 结语 前言 图片上传也基本是一个项目的必备功能了 所以今天和大家分享一下我最近在使用若依前后端分离版本时 如何实现图片上传功能的经验和心得 前端部分 在
  • 服务器硬件知识普及篇(需要配置服务器的朋友可以参考)

    开篇一 服务器主板 服务器主板概述 对于服务器而言 稳定性才是首要 服务器必须承担长年累月高负荷的工作要求 而且不能像台式机一样随意的重起 为了提高起可靠性普遍的做法都是部件的冗余技术 而这一切的支持都落在主板的肩上 下面我就来看看有关服务
  • JAVA word转pdf各个版本都支持,aspose-words

    以下提供两种方法实现 建议使用aspose 一 第一种 使用aspose words Word转PDF 第一步 首先需要下载aspose words 15 8 0包 官方的地址很慢 并且包下载不下来 有需要可以去GITHUB上寻找 这里我提
  • async/await处理多个异步请求

    async await 处理异步操作 axios defaults baseURL http localhost 9999 async function queryData let result await axios get adata
  • 使用MyEclipse创建JSP页面的一般步骤

    一 MyEclipse下建立点 当然事先JDK以及Tomcat以及装好 在包资源管理器中 新建Web Project 站点名称 MyJSP2 选择当前站点的工作目录 默认是我们打开MyEclipse时设置的工作目录 在这里也可以修改 最好是
  • 关于写死bootargs实例

    文章目录 1 说明 2 举例 3 原理 1 说明 1 附加的内核命令行 cmdline BOARD KERNEL CMDLINE 在build core Makefile中 有以下一段内容 strip起到去除空格的作用 BOARD KERN
  • 2020-03-12 git分支

    1 git c 配置 git c
  • mysql怎么生成ER_navicat怎么生成er

    Navicat软件真是一个好东西 今天需要分析一个数据库 然后想看看各个表之间的关系 所以需要查看表与表之间的关系图 专业术语叫做ER关系图 默认情况下 Navicat显示的界面是这样的 软件将表当做一个对象 然后显示了所有的表 仅仅通过这
  • 进程同步之信号量机制(pv操作)及三个经典同步问题

    1 信号量机制 信号量机制即利用pv操作来对信号量进行处理 什么是信号量 信号量 semaphore 的数据结构为一个值和一个指针 指针指向等待该信号量的下一个进程 信号量的值与相应资源的使用情况有关 当它的值大于0时 表示当前可用资源的数
  • 将控制台内容重定向至文件

    使用os system command 等模块执行系统命令时 返回值为命令执行结果 命令执行成功返回Ture 否则返回False 若要得命令本身返回的内容 需要将命令输出至控制台的内容写到文件中 即将标准输出由控制台重定向至文件 将控制台内
  • element时间选择器的默认值

    概览 vue使用element组件 需要给时间选择器设置默认值 场景一 默认时间选择器 场景二 时间范围选择器 开始时间和结束时间 一 默认时间选择器 实现思路 element组件的v model绑定的数据变化 则时间选择器的默认值变化 可
  • element-ui对话框dialog详解

    效果展示 先给大家展示一下大致的样式 代码
  • 删除卡在C盘和D盘之间的恢复盘

    依次点击 此电脑 gt 管理 gt 磁盘管理 可以看到上图中C盘和D盘之间有一个恢复分区 导致即使删除D盘 C盘也无法进行拓展 并且中间的分区是没法右键删除的 搜索 cmd 右键以管理员方式运行 输入命令删除恢复盘 Microsoft Wi
  • element-tree树结构-默认选中第一个节点高亮-根据id选中节点高亮

    前言 tree树结构是在开发中经常使用的组件 比如区域树 楼层树 组织架构树 等等包含节点关系 实际开发可能需要我们一进到页面选中树形结构第一个节点 并且调用数据 来达到用户体验 在用户选择之后 通过本地存储的方式把楼层id存起来 刷新之后
  • 使用Docker registry镜像创建私有仓库

    2015 01 25 wcdj 摘要 安装Docker后 可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境 本文记录简单的搭建过程 1 使用registry启动私有仓库的容器 docker run d p 5000 50
  • 设计模式学习之装饰器模式

    装饰器 Decorator 模式跟适配器 Adapter 模式一样 属于构建型设计模式 在学习适配器模式的时候说过 适配器模式的重点在复用能力 装饰器模式的重点在扩展能力 换言之 装饰器模式是先复用后扩展 这也导致了很多人跟适配器模式混淆
  • SpringBoot实现原理

    一 什么是SpringBoot SpringBoot是一个快速开发框架 快速的将一些常用的第三方依赖整合 原理 通过Maven子父工程的方式 简化XML配置 全部采用注解形式 内置Http服务器 Jetty和Tomcat 最终以java应用