2.7、简化配置 ⭐⭐
有一个统一的配置文件 : application.properties
官方配置选项: 2.4.3 application.properties配置选项
2.8、简化打包 ⭐⭐⭐
在以前我们如果需要打包一个jar包是非常繁琐的,我们需要先写入配置文件,然后打包成war包,再然后利用第三方工具进行将war包转换为jar包
。
现在我们SpringBoot给我们提供了一款便捷的打包工具插件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
然后我们在终端输入: mvn package
即可打包成功!!!
(三)、了解SpringBoot自动配置原理
1.SpringBoot特点
1.1、依赖管理
在实际开发中: 父项目是为了做依赖管理的,也就是统一管理我们软件开发的版本号。
(1).父项目控制版本依赖 (自动版本仲裁机制)
依赖管理 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> </parent> 他的父项目 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE</version> </parent> 几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制
他的父项目的父项目几乎指定了所有版本信息
(2).自定义依赖版本
在日常工作和开发中我们会遇到SpringBoot自动生成的很多版本和我们实际需要的版本不一致的问题,我们只需要在当前的的Maven依赖管理文件中新增如下版本指定即可覆盖原有的不合实际的版本。
1、查看spring-boot-dependencies里面规定当前依赖的版本 用的 key。 2、在当前项目里面重写配置 <properties> <mysql.version>5.16.4</mysql.version> </properties>
(3).starter场景启动器
1、见到很多 spring-boot-starter-* : *就某种场景 2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入 3、SpringBoot所有支持的场景 https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter 4、见到的 *-spring-boot-starter: 第三方为我们提供的简化开发的场景启动器。 5、所有场景启动器最底层的依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
(4).版本仲裁
1、引入依赖默认都可以不写版本 2、引入非版本仲裁的jar,要写版本号。
1.2、自动配置
(1).自动配备 Tomcat
引入Tomcat、配置Tomcat。
我们引入的web启动器中,底层帮我们引入了tomcat <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 点击查看web启动器的源码,发现以下Tomcat配置文件 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>2.4.3</version> <scope>compile</scope> </dependency>
(2).自动配备 SpringMVC
web启动器的源码依然帮助我们自动配备了webMVC
- 引入SpringMVC全套组件
- 自动配好SpringMVC常用组件(功能)
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.4</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.4</version> <scope>compile</scope> </dependency>
(3). 自动配备 常用组件
启动类返回的是IOC容器,我们查看这个IOC容器中的组件名都有哪些,就自动帮助我们配备了哪些组件。
package com.jsxs; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; /** * @Author Jsxs * @Date 2023/7/1 9:53 * @PackageName:com.jsxs * @ClassName: MainSpringApplication * @Description: TODO * @Version 1.0 */ @SpringBootApplication public class MainSpringApplication { public static void main(String[] args) { // 1.返回的是我们的IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainSpringApplication.class, args); // 2.我们查看IOC容器里面都有哪些组件 String[] benas = run.getBeanDefinitionNames(); for (String bena : benas) { System.out.println(bena); } } }
(4).默认的包结构 (修改默认扫描路径) ⭐
- 主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来
com +- example +- myapplication +- Application.java | +- customer | +- Customer.java | +- CustomerController.java | +- CustomerService.java | +- CustomerRepository.java | +- order +- Order.java +- OrderController.java +- OrderService.java +- OrderRepository.java
- 无需以前的包扫描配置
- 想要改变扫描路径,
@SpringBootApplication(scanBasePackages="com.atguigu")
或者@ComponentScan
指定扫描路径
1.在主程序的启动类上进行手动添加要扫描的位置,我们点开SpringBootApplication的注解源码发现里面存在一个value为scanBasePackages 我们只需要在这里指定扫描包的位置路径即可。 @SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan = @SpringBootApplication
package com.jsxs; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; /** * @Author Jsxs * @Date 2023/7/1 9:53 * @PackageName:com.jsxs * @ClassName: MainSpringApplication * @Description: TODO * @Version 1.0 */ @SpringBootApplication(scanBasePackages="com.jsxs") public class MainSpringApplication { public static void main(String[] args) { // 1.返回的是我们的IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainSpringApplication.class, args); // 2.我们查看IOC容器里面都有哪些组件 String[] benas = run.getBeanDefinitionNames(); for (String bena : benas) { System.out.println(bena); } } }
(5).自动配置 配置有用默认值
application.properties: 默认的配置其实都是映射到一个类上的
比如配置端口号映射的类名是 : ServerProperties.java