栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring Boot底层原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot底层原理

✨Spring Boot底层原理
  • Spring Boot优点
  • spring boot依赖的版本仲裁中心
  • spring boot启动器(简化maven依赖)
  • 主启动类和主配置类(xxxApplication)
  • 测试类
  • 使用maven构建spring boot项目

个人主页: 不断前进的皮卡丘
博客描述: 梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
网站推荐:千里之行,始于足下。每天坚持刷题,巩固所学知识,也为将来找工作,面试做好准备----- 刷题神器

Spring Boot优点
  • 简化maven依赖
  • 自动配置
  • 嵌入tomcat
spring boot依赖的版本仲裁中心

我们先创建一个项目

我们可以发现它有一个父模块spring-boot-starter-parent

 
        org.springframework.boot
        spring-boot-starter-parent
        2.7.2
         
    

我们可以按住CTRL,然后点击去看看

我们发现这个父模块,自己还有父模块spring-boot-dependencies


    org.springframework.boot
    spring-boot-dependencies
    2.7.2
  

我们继续点击进去看看

这里面定义了很多依赖的版本


定义了spring boot项目中所有子模块依赖的版本号,称为spring boot的版本的仲裁中心。

spring boot启动器(简化maven依赖)
  • 官方把很多模块功能,封装成了一个个的启动器
  • 命名方式:spring-boot-starter-模块名

我们点击spring-boot-starter-web,它里面的依赖如下代码所示

  • 添加了spring-web、spring-webmvc等springmvc的依赖
  • 添加了spring-boot-starter-tomcat依赖,嵌入了tomcat(精简版,不支持jsp,启动速度快)
  
    
      org.springframework.boot
      spring-boot-starter
      2.7.2
      compile
    
    
      org.springframework.boot
      spring-boot-starter-json
      2.7.2
      compile
    
    
      org.springframework.boot
      spring-boot-starter-tomcat
      2.7.2
      compile
    
    
      org.springframework
      spring-web
      5.3.22
      compile
    
    
      org.springframework
      spring-webmvc
      5.3.22
      compile
    
  

主启动类和主配置类(xxxApplication)


按住ctrl,点击这个注解进去看看

  • @SpringBootApplication
    标注了@SpringBootApplication注解的是程序主入口类和主配置类,它是一个组合注解,包含以下几个主要的注解

    • @SpringBootConfiguration
      它的内部使用了原生注解@Configuration 说明当前类是项目的配置类

    • @EnableAutoConfiguration 开启自动配置

    • @ComponentScan 组件扫描,默认会扫描主配置类所在包下的所有注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
@Documented
@Repeatable(ComponentScans.class)
public @interface ComponentScan {
    @AliasFor("basePackages")
    String[] value() default {};

    @AliasFor("value")
    String[] basePackages() default {};

    Class[] basePackageClasses() default {};

    Class nameGenerator() default BeanNameGenerator.class;

    Class scopeResolver() default AnnotationScopeMetadataResolver.class;

    ScopedProxyMode scopedProxy() default ScopedProxyMode.DEFAULT;

    String resourcePattern() default "**/*.class";

    boolean useDefaultFilters() default true;

    ComponentScan.Filter[] includeFilters() default {};

    ComponentScan.Filter[] excludeFilters() default {};

    boolean lazyInit() default false;

    @Retention(RetentionPolicy.RUNTIME)
    @Target({})
    public @interface Filter {
        FilterType type() default FilterType.ANNOTATION;

        @AliasFor("classes")
        Class[] value() default {};

        @AliasFor("value")
        Class[] classes() default {};

        String[] pattern() default {};
    }
}

测试类


我们可以看到用单元测试,也是可以的,那么什么情况单元测试不好用呢

我们创建一个实体类stu

然后测试一下,我们发现stu并没有注入进来

因为这个时候,我们在单元测试中,并没有把springboot的一些配置整合进来,我们加上@SpringBootTest

使用maven构建spring boot项目




pom.xml



    4.0.0

    com.zyh.springboot
    springboot04_maven
    1.0-SNAPSHOT

    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.7.2
    
    
        8
        8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-test
        
    

添加主程序
先创建一个包,然后把主程序写在这个包下面

在配置文件中可以指定端口号等信息

编写Controller

测试,运行启动类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031065.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号