设为首页 加入收藏

TOP

day04-实现SpringBoot底层机制(一)
2023-07-25 21:37:46 】 浏览:68
Tags:day04- 实现 SpringBoot

实现SpringBoot底层机制

Tomcat底层启动分析+Spring容器初始化+Tomcat关联Spring容器

1.任务1-创建Tomcat,并启动

(1)创建一个Maven项目,修改pom.xml文件:我们需要自己创建Tomcat对象,因此在引入的场景启动器中排除SpringBoot内嵌的Tomcat,并引入tomcat依赖库

<!--导入SpringBoot父工程-规定写法-->
<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.5.3</version>
</parent>
<dependencies>
    <!--导入web项目场景启动器:会自动导入和web开发相关的所有依赖[jar包]-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <!--因为我们要自己创建Tomcat对象,并启动,因为我们要先排除内嵌的spring-boot-starter-tomcat-->
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <!--指定Tomcat版本,引入tomcat依赖库
        1.指定版本为8.5.75
        2.如果我们引入了自己指定的tomcat,一定要记住把前面的spring-boot-starter-tomcat排除
        3.否则会出现GenericServletNotFound错误-->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>8.5.75</version>
    </dependency>
</dependencies>

(2)创建LiSpringApplication.java

package com.li.lispringboot;

import org.apache.catalina.startup.Tomcat;

/**
 * @author 李
 * @version 1.0
 */
public class LiSpringApplication {
    //创建tomcat对象,并关联spring容器,然后启动tomcat
    public static void run() {
        try {
            //创建tomcat对象
            Tomcat tomcat = new Tomcat();
            //设置默认端口-9090
            tomcat.setPort(9090);
            //启动,就会在指定端口监听
            tomcat.start();
            //等待请求接入
            System.out.println("======9090端口等待请求接入======");
            tomcat.getServer().await();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

(3)LiMainApp

package com.li.lispringboot;

/**
 * @author 李
 * @version 1.0
 */
public class LiMainApp {
    public static void main(String[] args) {
        //启动LiSpringBoot项目/程序
        LiSpringApplication.run();
    }
}

(4)测试启动main方法,后台输出如下:

image-20230315185127121 image-20230315185616405

打开浏览器,访问9090端口,页面一片空白,因为这时候还没有接入其他组件。

image-20230315190021617

2.任务2-创建Spring容器

(1)创建Monster.java,做一个测试bean

package com.li.lispringboot.bean;

/**
 * @author 李
 * @version 1.0
 */
public class Monster {
}

(2)创建HelloController.java,做一个测试Controller

package com.li.lispringboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 李
 * @version 1.0
 */
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String Hello() {
        return "Hello,I'm HelloController!";
    }
}

(3)创建LiConfig.java,作为Spring的配置文件

package com.li.lispringboot.config;

import com.li.lispringboot.bean.Monster;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * @author 李
 * @version 1.0
 * 配置类-作为Spring的配置文件
 * 这里有一个问题,容器怎么知道要扫描哪些包?
 */
@Configuration
@ComponentScan("com.li.lispringboot")//指定要配置类扫描哪些包
public class LiConfig {
    //注入Bean-Monster对象到Spring容器
    @Bean
    public Monster monster() {
        return ne
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇自定义 Spring 通用日志注解 下一篇Java并发小结02

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目