简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者
Spring Boot是一个快速开发框架,快速的将一些常用的第三方依赖整合(原理:通过Maven子父工程的方式),简化XML配置,全部采用注解形式,内置Http服务器(JettyTomcat),最终以java应用程序进行执行

特点

  • 可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs
  • 内嵌Tomcat或Jetty等Servlet容器
  • 提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置
  • 尽可能自动配置Spring容器
  • 提供准备好的特性,如指标、健康检查和外部化配置
  • 绝对没有代码生成,不需要XML配置

核心原理

  • 基于Spring MVC无配置文件(纯Java)完全注解化 + 内置Tomcat-embed-core实现Spring Boot框架,main函数启动。
  • Spring Boot核心快速整合第三方框架原理:Maven继承依赖关系

重点

Spring Boot通过引用Spring-Boot-stater-web依赖,整合Spring MVC框架。只需要引用一个Jar包,就可以通过Maven继承的方式引用到Spring-aopSpring-beansSpring-coreSpring-web等相关依赖。
Spring-Boot-stater-web 依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.4.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
    <!-- SpringBoot 整合SpringMVC -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

注解化

Spring 3.0以上提供了注解形式,完全不用编写任何配置文件来加载项目
Spring MVC内置注解加载整个Spring MVC容器。相当于使用Java代码编写Spring MVC初始化。
流程: 先创建Tomcat容器,然后加载class文件,加载过程中如果发现有java代码编写的SpringMVC初始化,就会创建SpringMVC容器。所有程序执行完毕后,项目就可以访问了

package cn.teamep.springbootdemo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
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;

/**
 * @author 星朝
 * @version 1.0
 * @desc Spring MVC 配置信息
 * @date 2020/7/24 0024
 * @time 22:29
 * @copyright &copy; Anemone
 * @address 浙江省绍兴市
 */
@Configuration
@EnableWebMvc   // 开启 Spring MVC 容器
@ComponentScan(basePackages = {"cn.teamep.springbootdemo.controllers"})
public class WebConfig extends WebMvcConfigurerAdapter {
    /**
     * Spring Boot 整合 jsp
     * 需要配置视图转换器
     * 创建 Spring MVC 视图解析器
     * @return viewResolver
     */
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/");
        viewResolver.setSuffix(".jsp");
        // 可以在 JSP 页面中通过 ${} 访问 Bean
        viewResolver.setExposeContextBeansAsAttributes(true);
        return viewResolver;
    }
}

内置Http服务器

package cn.teamep.springbootdemo;

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;

import java.io.File;

public class AppTomcat {
    public static void main(String[] args) {
        start();
    }

    private static void start() {
        // 创建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(), "/"));
        try {
            tomcatServer.start();
        } catch (LifecycleException e) {
            e.printStackTrace();
        }
        // 异步等待请求执行
        tomcatServer.getServer().await();
    }
}
最后修改:2020 年 07 月 24 日 10 : 53 PM
如果觉得我的文章对你有用,请随意赞赏