SpringBoot学习-初始化与运行
1.软件环境
- JDK1.8
- maven仓库
- idea或者STS
2.初始化的一个简单项目
1.步骤一
阿里网址:https://start.aliyun.com
2. 步骤二
3. 步骤三
后期可以自己手动添加,不必太在意。
4. 步骤四
5. 步骤五
等待创建,创建完成后,可以删除不用的文件,也可以留下来,无影响。
6. 步骤六
新版本SpringBoot可以加入父项目依赖,也可以不加。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
</parent>
3.打包插件应用
-
这个插件可以将应用打包成一个可执行的jar包 (将插件放入pom.xml)
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
-
使用插件的package命令进行打包
-
java -jar 命令 运行 jar包
4.pom.xml
-
父项目(版本控制)
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.RELEASE</version> </parent>
ctrl+右键打开 spring-boot-starter-parent ,发现 spring-boot-starter-parent父项目依赖于spring-boot-dependencies父项目
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.0.RELEASE</version> </parent>
所以spring-boot-dependencies这个父项目才是真正管理Spring-Boot应用的所有依赖版本。
也是Spring Boot的版本仲裁中心;以后我们导入依赖是不需要写版本号;(没有在dependecies里面管理的依赖自然需要写版本号)
-
web模块依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
帮我导入web模块正常运行的所有依赖。
具体可以查看更多starter(启动器)
- Spring Boot 将所有功能场景抽取出来,做成一个个starters(启动器),只需要在项目里面引入启动器。
5.主程序类
-
@SpringBootApplication
Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行在这个类的main方法来启动。
-
分析
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication {
-
@SpringBootConfiguration(Spring Boot的注解)
标注在某个类上,表示这是一个Spring Boot的配置类
-
@Configuration(Spring的注解)
配置类上标注这个注解;
配置类-------配置文件
配置类也是容器中的一个组件;@Component
-
-
@EnableAutoConfiguration
开启自动配置功能
以前我们需要配置的东西,Spring Boot帮我们自动配置;
-
@AutoConfigurationPackage
自动配置包
-
@Import({AutoConfigurationPackages.Registrar.class})
-
@Import({Registrar.class})
Spring的底层注解@Import,给容器中导入一个组件;
导入的组件由Registrar.class(具体底层原理)
new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0])
对这段代码,设置断点调试,点击右键计算值(Evluate Expression)得到我们的包名。这个计算的结果就是(@SpringBootAplication标注的类)的目录
将主配置类(@SpringBootAplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器中;
所以controller包 和 主配置类(@SpringBootAplication标注的类)必须处在同一个目录下
-
-
@Import({EnableAutoConfigurationImportSelector.class})
-
@Import({AutoConfigurationImportSelector.class})
给容器中导入组件
翻译:自动导入组件的选择器
将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中
会给容器中导入非常多的自动配置类(xxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件。
configurations = this.removeDuplicates(configurations);
对这段代码进行代码调试,得到一个数组(如下是数组中的一些内容)
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration org.springframework.boot.autoconfigure.data.neo4j.Neo4jDataAutoConfiguration
这些类(组件)就是自动配置类(代替了以前使用xml文件进行的配置)
该注解的作用就是给容器中导入非常多的自动配置类(xxxAutoConfiguration)
自动配置类(xxxAutoConfiguration)给容器中导入这个场景需要的所有组件,并配置好这些组件。
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes); //getCandidateConfigurations方法的主要方法 SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader) classLoader类加载器 //进入loadFactoryNames方法的主要方法 (加载配置文件) loadSpringFactories() Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories"); //旧版本引用的是常量 (大致方法类似) //通过类加载器获取类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
打开External Libraries中的spring-boot-autoconfigure-2.3.0.RELEASE.jar
打开META-INF/spring.factories文件找到org.springframework.boot.autoconfigure.EnableAutoConfiguration=\的以下内容就是刚才的(自动配置类)数组内容。
读取META-INF/spring.factories配置文件获取到自动配置类的值,再将这些值导入到容器中,自动配置类就生效了,帮我们进行自动配置工作。
spring-boot-autoconfigure-2.3.0.RELEASE.jar有所有的相关配置。
-
6.Resources文件夹中的目录结构
-
static
保存所有的静态资源
列如 js,css,images -
templates
保存所有的模板页面;(Spring Boot 默认使用嵌入式的Tomcat,默认不支持JSP页面);可以使用模板引擎(freemarker,thymeleaf)
-
application.properties
SpringBoot应用的配置文件,可以修改一些默认配置
7. 补充使用STS创建项目
阿里网址: https://start.aliyun.com