专栏首页Java编程技术Springboot模块分类

Springboot模块分类

1.1、 spring-boot模块

该模块提供了一些特性用来支持springboot中其他模块,这些特性包含如下。

  • SpringApplication类提供了静态方法以便于写一个独立了spring应用程序,该类的主要职责是create和refresh一个合适的Spring 应用程序上下文(ApplicationContext)
  • 给web应用提供了一个可选的web容器(目前有Tomcat或Jetty)
  • 一流的外部配置的支持(application.properties)
  • 提供了便捷的应用程序上下文(ApplicationContext)的初始化器,以便在ApplicationContext使用前对其进行用户定制。

1.2、 spring-boot-autoconfigure模块

springboot可以依据classpath里面的依赖的内容来自动配置bean到IOC容器,但是要开启这个自动配置功能需要添加@EnableAutoConfiguration注解。Auto-configuration会尝试推断哪些beans是用户可能会需要的。比如如果HSQLDB包在当前classpath下,并且用户并没有配置其他数据库链接,这时候Auto-configuration功能会自动注入一个基于内存的数据库连接到应用的IOC容器。

目前 auto-configuration 提供以下类型的注入:

  • Web (Tomcat or Jetty, Spring MVC)
  • JDBC (Commons DBCP, embedded databases, jdbcTemplate)
  • JPA with Hibernate
  • Spring Data JPA (automatically detecting Repository classes)
  • Spring Batch (including JobLauncherCommandLineRunners and database initialization)
  • Thymeleaf templating
  • Reactor asynchronous JVM programming

auto-configuration使用在class上标注@Configuration注解实现,并且使用@Configuration的时候一般带有一定的约束,比如同时还在Class上标注了 @ConditionalOnClass(当前classpath下存在类) 和@ConditionalOnMissingBean(当前IOC容器不存在bean)注解。这保证了classpath下存在一些相关的类并且需要的bean还没有被注入到IOC时候auto-configuration才生效。

1.3、 spring-boot-starters模块

Starters是一组可以方便使用的依赖描述,starter里面一般只有一个POM文件,pom文件里面添加了Spring框架和一些相关的功能模块的依赖配置,你需要使用某些功能时候在也不需要到处查找需要的功能都是那些jar包提供的并配置到POM文件了。比如如果你想要使用Spring和JPA作为数据库存取,你需要引入spring-boot-starter-data-jpa在你的工程即可。

1.4、 spring-boot-actuator模块

SpringBoot还提供了许多附加功能,可以帮助我们在应用程序部署到生产环境后对其进行监控和管理。springboot提了http,jmx,shell等公交来管理和监控我们的应用程序。另外审计,监控和性能指标的?可以自动应用到应用程序上。

1.5、 spring-boot-cli模块

Spring Boot CLI是一个命令行公交用来快速搭建一个spring原型应用,并且可以运行Groovy脚本。

1.6、 spring-boot-loader模块

Spring Boot Loader模块允许我们使用java -jar archive.jar运行包含嵌套依赖的jar或者war文件, Spring Boot Loader提供了三种类启动器 (JarLauncher, WarLauncher and PropertiesLauncher),这些类启动器的目的一样都是加载嵌套在jar里面的资源(比如class文件,配置文件等)。[Jar|War]Launcher固定去查找当前jar的lib目录里面的嵌套jar文件里面的资源。

正常情况下classloader只能找到jar里面文件类里面的*.class文件,之前都是把嵌套jar里面的class文件和应用的class文件打包为一个jar,这样就不存在嵌套jar了,但是这样做就不能很清晰的知道应用到底依赖了哪些东西,哪些是应用自己的,另外多个jar里面的class可能内容不一样但是文件名却一样。为了解决这些问题,SpringBoot提供了一种方式,Springboot中jar文件格式固定如下:

example.jar
 |
 +-META-INF
 |  +-MANIFEST.MF
 +-org
 |  +-springframework
 |     +-boot
 |        +-loader
 |           +-<spring boot loader classes>
 +-com
 |  +-mycompany
 |     + project
 |        +-YouClasses.class
 +-lib
    +-dependency1.jar
    +-dependency2.jar

应用依赖的jar固定放到lib目录。

该模块中Launcher用来启动我们的打包应用程序,它主要关心构造一个合适的URLClassLoader加载器用来调用我们应用程序的main方法。

对应jar包,spring-boot-maven-plugin插件会设置META-INF/MANIFEST.MF中的 Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: com.mycompany.project.MyApplication

也就是java -jar 方式启动应用实际启动的是JarLauncher 的main方法,而不是我们的应用的MyApplication的里面的main方法。后者是在前者中使用一个新建的类加载器LaunchedURLClassLoader启动的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SpringBoot之spring-boot-load模块

    正常情况下classloader只能找到jar里面当前目录或者文件类里面的*.class文件。为了能够加载嵌套jar里面的资源之前都是把嵌套jar里面的clas...

    加多
  • SpringBoot之日志文件找不到

    做新应用就是这样,会遇到各种问题,昨天刚解决了加载某一个类时候抛出了class is not visible from class loader的问题,今天就有...

    加多
  • UML建模(组件图)

    组件图是为了展示组元(components),组元提供的接口(provided inerfaces)和需要调用的接口(required interfaces),...

    加多
  • SpringBoot模块组成

    1.1、 spring-boot模块 该模块提供了一些特性用来支持springboot中其他模块,这些特性包含如下。 SpringApplication类提供了...

    企鹅号小编
  • spring boot应用启动原理分析

    摘要: spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar...

    Java架构师历程
  • Android Studio下打jar包及使用jar包

    用户1733354
  • 关于技术分享的一点感悟(r5笔记第22天)

    想想自大学以来接触的开发语言也不少了,开始启蒙的pascal,到后面的c,c++,c#,java,jsp,一直到了后面的各种J2EE框架,在平时也学习了orac...

    jeanron100
  • SpringBoot之部署以及Maven打包切换环境

    前言:之前一直用的 Java-jar 运行的,但是部署的时候得停止服务 通过端口kill 掉的,最近在推酷上发现一个安全关闭springboot的博客 ,所以...

    王念博客
  • Leetcode-Easy 852. Peak Index in a Mountain Array

    致Great
  • verilog常用语法一让您的FPGA设计更轻松

    FPGA 设计的硬件语言Verilog中的参数化有两种关键词:define 和 paramerter,参数化的主要目的是代码易维护、易移植和可读性好。

    FPGA开源工作室

扫码关注云+社区

领取腾讯云代金券