SpringBoot:关于SpringBoot的初步认识

SpringBoot 技术

基本认识

SpringBoot:关于SpringBoot的初步认识_第1张图片

简介

​ JAVAEE 应用体系中繁重的配置、低下的开发效率、高难度的三方集成,复杂的部署流 程等等一直被开发人员所诟病。

Spring 这样的轻量级的资源整合框架,在实现其相对比较多的资源整合时,依旧需要 大量的手动依赖管理,复杂的 XML 配置(还经常没有提示)

​ 现在的软件生态应用也已经形成一定的规模,系统架构正在从单体架构,分布式架构, 跨越到微服务架构。随着整个架构体系的变化,企业对技术的要求也在变化,现在的企业更 注重技术的开箱即用,更注重技术在生态圈中的深度融合,更注重轻量级的运维。

​ 由此由此 spring boot 诞生。 Spring Boot 是 Java 软件开发框架(很多人现在把它理解为一个脚手架),其设计目 的是用来简化 Spring 项目的初始搭建以及开发过程。该框架使用了特定的注解方式来进行 配置,从而使开发人员不再需要大量的 xml 配置。不再需要大量的手动依赖管理。

​ Spring Boot 基于快速构建理念,通过约定大于配置,开箱即用的方式,希望能够在蓬勃发展的快 速应用开发领域成为其领导者。

关键特性

​ SpringBoot 其核心特性包含如下几个方面:

​▪ 起步依赖(Starter Dependency),

​ --创建SpringBoot项目后,一些基本的配置以及依赖已经自动装配完毕,无需再手动配置等操作。

​▪ 自动配置(Auto Configuration),

​ --例如数据库的连接、缓存的配置以及异步的配置等的基本配置

​▪ 健康检查(Actator)-监控,

▪ 嵌入式服务(Tomcat,Jetty)等。

基础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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    
    <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.3.8.RELEASEversion>
        <relativePath/> 
    parent>

    
    <groupId>com.cygroupId>
    <artifactId>01-springboot-noticeartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>01-springboot-noticename>
    <description>Demo project for Spring Bootdescription>

    
    <properties>
        <java.version>1.8java.version>
    properties>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>

    <build>
        
        <plugins>
            
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

project>

启动类在运行时都做了什么

package com.cy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * 启动类:由@SpringBootApplication注解描述
 * 启动类在运行时都会做什么呢?
 * 1)通过ClassLoader(类加载器-负责将磁盘中的类读到内存中)将指定包中的类加载到内存.
 * 2)通过线程(thread)调用io(InputStream)从磁盘(Disk)读取文件(File)信息.
 * 3)读取类上的描述(@Component,@Service,@Controller,.....),并基于描述构建-
 * -配置对象(BeanDefinition),存储类的配置信息(类全名,作用域,....).
 * 4)基于类的配置信息通过Bean工厂反射构建类的实例(对象),并进行存储(对象池-用时从池中取)
 * 5)当我们需要一个类的实例时可以从对象池(Bean池)获取即可.
 * JVM 参数分析
 * 1)检测类的加载:-XX:+TraceClassLoading(设置位置:idea->Edit configurations->VM options)
 */
@SpringBootApplication
public class NoticeApplication {
     

    public static void main(String[] args) {
     
        SpringApplication.run(NoticeApplication.class, args);
    }
/**
 * 记住(规则):我们要交给spring容器管理的对象,一定要放在启动类所在包或子包中,
 * 然后使用特性注解进行描述(@Component,@Service,....)
 *
 * FAQ?
 * Spring是一个资源管理框架,请问资源是谁?对象
 */
}

启动检测类加载过程配置

SpringBoot:关于SpringBoot的初步认识_第2张图片

控制台结果摘要:

SpringBoot:关于SpringBoot的初步认识_第3张图片

启动时首先加载的是JDK;

然后会去加载启动类(此处为NoticeApplication类)的父类,此处NoticeApplication类并未直接声明父类,所以他的父类是Object类;

接着再去加载其他的类。

启动过程图解

SpringBoot:关于SpringBoot的初步认识_第4张图片

注意事项

​ 启动类启动时会扫描启动类所在包及其子包,因此我们写的业务代码要写在启动类所在包或者其子包里面(并且具体的业务还要使用特定的注解进行标注),否则springboot将不会对其进行管理;

问题思考

Spring是一个资源管理框架,请问资源是谁? 对象

对象的创建是需要基于类来创建的,那么类在哪里? 磁盘

类在磁盘中,那么类如何读到磁盘里? 通过线程调用IO

类读到内存中就会创建该类的字节码对象,字节码对象会检查本类有没有被特定注解修饰,如果检测到了有特定注解,就会被交给springboot进行管理。

会将有注解修饰的类的配置信息存储到BeanDefinition(即配置对象)中,如果该类没有设置延迟加载,那么就会基于配置对象的配置信息通过BeanFactory构建为具体的对象,并将这些对象放在BeanPool中,使用时直接拿就好。

如果存在延时加载,则在该类对象需要被使用时,再通过BeanFactory构建对象,并使用。

开箱即用

SpringBoot:关于SpringBoot的初步认识_第5张图片

springboot项目在启动时会自动去配置一些jar包,无需我们人为手动去配置,我们直接去用就可以了,从而展现了“开箱即用”的效果;

具体的实现流程

当我们执行启动类时,程序运行run()方法,里面是这个类的字节码对象,当检测到了字节码兑现后,会去检查这个类上有没有注解,该类被@SpringBootApplication注解修饰,因此需要交给springboot进行管理;

SpringBoot:关于SpringBoot的初步认识_第6张图片

进而去查看@SpringBootApplication注解,发现该注解也被诸多注解进行修饰,其中有个@EnableAutoConfiguration的注解,该注解就是负责自动化配置的;

SpringBoot:关于SpringBoot的初步认识_第7张图片

查看@EnableAutoConfiguration注解源码,发现该注解上有关于自动化配置包及选择器的注解,会自动化的配置包及一些自动化jar包文件的配置;

SpringBoot:关于SpringBoot的初步认识_第8张图片

至此就会达到一些功能及jar包文件的自动化配置,达到“开箱即用”的效果。
以上,仅供学习参考

你可能感兴趣的:(笔记,Java基础,spring,boot,spring,java,maven)