将 SpringBoot 项目打包为 Jar 包
maven pom.xml
中加入如下代码:
1 | <build> |
使用 mvn package 就可以将应用打包。
在终端里 cd 到 jar 的位置后,java -jar (jar包名称或路径)
就可以运行项目,而且不需要配置 tomcat 环境,因为 SpringBoot 集成了 tomcat。
POM 文件解析
父项目
1 | <parent> |
父项目作用:依赖管理
这个父项目还有一个父项目:
1 | <parent> |
这个父项目才是真正管理 Spring Boot 应用里面的所有的依赖管理的,其 <properties>
属性规定了常用包的版本号。所以导入以及规定版本的包是不需要写版本号的。
导入依赖
1 | <dependency> |
spring-boot-starter-web
: spring-boot 场景启动器,导入了 web 模块正常运行需要的依赖
Sping Boot 将所有的功能场景都抽取出来,做成一个 starters,只需要在项目里面引入这些 starter 相关的场景依赖都会自动导入进来。
主程序类
1 |
|
@SpringBootApplication
说明被注解标注的类是 SpringBoot 的主配置类,SpringBoot 应该运行这个类的 main 方法来启动 SpringBoot 应用。
注解部分源码:
1 | ({ElementType.TYPE}) |
@SpringBootConfiguration
: 表示被标注的类是 SpringBoot 的配置类,配置类也是容器中的一个组件
@EnableAutoConfiguration
:开启自动配置的功能
自动配置的原理:
注解部分源码:
1
2
3
4 >
> ({AutoConfigurationImportSelector.class})
> public EnableAutoConfiguration {
>
@AutoConfigurationPackage
: 自动配置包,使用@Import({Registrar.class})
这个 Spring 底层注解来实现,给容器中导入一个组件。
1
2 > > public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
> >
将主配置类 (
@SpringBootApplication
标注的类)的所在包下面的所有子包里面的所有组件扫描到 Spring 容器
@Import({AutoConfigurationImportSelector.class})
: 给容器中导入组件将所有需要导入的组件以全类名的方式返回,添加到容器中。会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景所需要的所有组件,并配置好这些组件。
AutoConfigurationImportSelector
类部分代码:
1
2
3
4
5
6
7
8
9
10 > > public String[] selectImports(AnnotationMetadata annotationMetadata) {
> > if (!this.isEnabled(annotationMetadata)) {
> > return NO_IMPORTS;
> > } else {
> > AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
> > AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
> > return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
> > }
> > }
> >
方法
getAutoConfigurationEntry
中的List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
configurations
数组就是容器中需要导入的组件。
SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());
从类加载器中获取资源,将资源作为
properties
配置文件,从中拿出工程的名字:factoryClass.getName()
。从类路径下的 META-INF/spring.factories 中获取
EnableAutoConfiguration
指定的值,将这些值作为自动配置类导入到容器中。
有了自动配置类,就免去了手动编写而配置注入功能组件等的工作。
J2EE 的整体解决方案和自动配置都在 spring-boot-autoconfigure-xxx.RELEASE.jar;
使用 Spring Initializr 快速创建项目
Idea 或者官网的 Spring Initialzr 可以快速创建项目。
默认生成的 Spring Boot 项目:
- 主程序、测试文件生成好了
- resource 文件夹的目录结构
- static: 保存所有的静态资源:js、css、images;
- templates: 保存所有的模板页面;(由于使用嵌入式的 Tomcat,默认不支持 JSP)
- application.properties: Spring Boot 应用的配置文件,可以修改默认设置;