SpringBoot 二、SpringBoot模块组成

1、spring-boot模块

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

SpringApplication类提供了静态方法以便于写一个独立了spring应用程序,该类的主要职责是create和refresh一个合适的Spring 应用程序上下文(ApplicationContext)

给web应用提供了一个可选的web容器(目前有Tomcat或Jetty)

一流的外部配置的支持(application.properties)

提供了便捷的应用程序上下文(ApplicationContext)的初始化器,以便在ApplicationContext使用前对其进行用户定制。

2、 spring-boot-autoconfigure模块

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

SpringBoot模块组成

Java

目前 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才生效。

3、 spring-boot-starters模块

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

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.2.RELEASE</version>
        <relativePath/><!-- lookup parent from repository --> 
  </parent>

其主要作用:

指定编码格式默认使用utf-8。
指定java版本默认使用1.8。
提供Dependency Management进行项目依赖的版本管理,如指定实际依赖的版本号(已经做版本兼容性测试)。
默认的资源过滤和插件管理。

4、 spring-boot-actuator模块

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

5、 spring-boot-cli模块

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

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文件格式固定如下:
在这里插入图片描述

Java

应用依赖的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启动的。


版权声明:本文为linjpg原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>