🏡JAVA码农探花:
🔥 推荐专栏:《SSM笔记》《SpringBoot笔记》
🛸学无止境,不骄不躁,知行合一
目录
前言
一、SpringBoot项目结构
1.启动类的位置
2.pom文件
start
parent
打包
二、依赖管理特性
三、自动配置特性
总结
SpringBoot项目结构,特性介绍(常用到的基本都讲解了,很详细,基于官方文档讲解)。
IDEA创建非常简单,不是主要讲解,我使用的是IDEA2023.3(这里默认你Maven环境都配好了)
创建完成后的文件结构如下:
- 官方建议最佳实战就是将启动类放在工程文件夹下的第一层,不需要再嵌套文件夹。
- 官方说:@SpringBootApplication 注解一般都是注解在启动类上的。它默认会扫描当前类下的所有子包(也就是与当前启动类同级文件夹的包及其下的所有包,如下图的customer、order包及其下的所有包)。例如,如果你正在编写一个JPA应用程序,你的 @Entity 类只有定义在启动类的子包下才能被扫描加载到。这样的好处也显而易见,@SpringBootApplication 默认只会扫描加载你项目工程中的组件。
//初始创建的SpringBoot项目的启动类都是如下代码: import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class RestartApplication { public static void main(String[] args) { SpringApplication.run(RestartApplication.class, args); } }
- Starter是一系列开箱即用的依赖,你可以在你的应用程序中导入它们。 通过你Starter,可以获得所有你需要的Spring和相关技术的一站式服务,免去了需要到处大量复制粘贴依赖的烦恼。
- 例如,如果你想开始使用Spring和JPA进行数据库访问,那么可以直接在你的项目中导入 spring-boot-starter-data-jpa 依赖。(也就是说现在你想要什么依赖,只需要spring-boot-start-xxx就可以帮你自动导入这方面的所有常规依赖)
- Starter含了很多你需要的依赖,以使项目快速启动和运行,并拥有一套一致的、受支持的可管理的过渡性依赖。
例子:
在idea的终端输入 mvn dependency:tree打印了一个项目依赖的树状图,如下:
你可以看到 spring-boot-starter-parent 本身没有导入什么依赖(就是一些基本的依赖如spring方面的,日志方面的等)。 要导入必须的依赖,需要编辑 pom.xml 文件。
假如正在开发一个Web应用程序,我们添加一个 spring-boot-starter-web 依赖项:
org.springframework.boot spring-boot-starter-web
如果你再次运行 mvn dependency:tree ,你会看到现在有一些额外的依赖,包括Tomcat web服务器等。基本将常规依赖都引入进来了。
- spring-boot-starter-parent 是一个特殊的starter,它在POM.xml里面声明了spring boot的各个依赖及其版本。子项目直接继承它,子项在导入 spring boot 依赖时,不需要声明版本号。
- 通俗的说parent部分就是在你导入spring-boot-start–parent时,自动帮你冲裁了版本号,你在dependenys标签里的依赖可以不用写版本号
提问:不想使用仲裁版本怎么办?
在pom.xml重写配置,如下面的代码(这里以mysql为例,换成5.1.43版本):
5.1.43
使用Maven快速打包
IDEA内终端运行mvn package
$ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] .... .. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject --- [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:3.2.0-SNAPSHOT:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
另一种:
运行后你会发现工程内多个target文件夹:
如果你查看 target 目录,你应该看到 项目名-0.0.1-SNAPSHOT.jar
(没有target可以在从电脑中找到项目文件夹,里面应该能找到target文件夹,在jar包所在文件夹打开电脑终端,运行java -jar 项目名-1.0-SNAPSHOT.jar)
IDEA终端运行java -jar target/myproject-0.0.1-SNAPSHOT.jar:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.1.2-SNAPSHOT) ....... . . . ....... . . . (log output here) ....... . . . ........ Started MyApplication in 0.999 seconds (process running for 1.253)
要退出应用程序,按 ctrl-c。
如果你想看看这jar里面到底有什么东西,你可以使用 jar tvf:jar tvf target/项目名-0.0.1-SNAPSHOT.jar
Spring Boot的每个版本都提供了一个它所支持的依赖的列表。 在实践中,你不需要在构建配置中为这些依赖声明版本,因为Spring Boot会帮你管理这些。 当你升级Spring Boot本身时,这些依赖也会一同升级。(所以现在你联系一下parent和start是不是豁然开朗)
所有场景启动器最底层的依赖org.springframework.boot spring-boot-starter 3.1.2 compile
无需关注版本号,自动版本仲裁
可以修改默认版本号
5.1.43
IDEA快捷键:
org.springframework.boot spring-boot-starter-tomcat 3.1.2 compile
自动配好SpringMVC
自动配好Web常见功能,如:字符编码问题
public static void main(String[] args) { //1、返回我们IOC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); //2、查看容器里面的组件 String[] names = run.getBeanDefinitionNames(); for (String name : names) { System.out.println(name); } }
这里截取了一部分,可以看出里面SpringBoot真的很强大,不需要SSM一样导入一堆依赖。
@SpringBootApplication 等同于 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com.lun")
各种配置拥有默认值
按需加载所有自动配置项
下面是参考文档,有兴趣的朋友可以看看:
Spring Boot Maven 插件文档
中文文档——SpringBoot入门
以上就是SpringBoot的特性及结构的具体讲解。