Spring Boot工程结构
在上一篇:https://hanbinit.com.cn/post/12
中,老韩通过https://start.spring.io
创建了一个基本的Spring Boot工程,并在里面进行了简单的编码,实现了一个对外的/hello
接口。
本文来看下Spring Boot工程
的包结构。
先看图:
了解过Maven
的朋友可以很快发现,这个结构就是个典型的Maven工程结构。
在这个图中:
红色竖线
标记的区域是项目的核心Java代码编写地方,其中DemoApplication.java
文件是Spring Boot
工程的默认入口;蓝色竖线
标记的区域是放资源文件的地方,其中application.properties
是Spring Boot
工程默认的配置文件;绿色竖线
和黄色竖线
区域分别是测试用例
和maven
配置区域,一般我们只会改动pom.xml
文件。另外两个配置文件(mvnw和mvnw.cmd)是不动的,他们是Maven wrapper
的一部分。
idea
默认就是使用Maven wrapper
来构建项目的。这个不影响我们的使用,除非你对maven版本
有特殊要求,否则这个地方可以忽略。
基于上面的配置,老韩本机的.m2
目录下是这样的:
hanbin@hanbins-MacBook-Pro .m2 % tree -L 3
.
├── repository
│ ├── aopalliance
│ │ └── aopalliance
│ ├── avalon-framework
│ │ └── avalon-framework
│ ├── ch
│ │ └── qos
│ ├── classworlds
│ │ └── classworlds
│ ├── com
│ │ ├── fasterxml
│ │ ├── github
│ │ ├── google
│ │ ├── jayway
│ │ ├── querydsl
│ │ ├── thoughtworks
│ │ ├── vaadin
│ │ └── vladsch
│ ├── commons-beanutils
│ │ └── commons-beanutils
│ ├── commons-chain
│ │ └── commons-chain
│ ├── commons-codec
│ │ └── commons-codec
│ ├── commons-collections
│ │ └── commons-collections
│ ├── commons-digester
│ │ └── commons-digester
│ ├── commons-io
│ │ └── commons-io
│ ├── commons-lang
│ │ └── commons-lang
│ ├── commons-logging
│ │ └── commons-logging
│ ├── dom4j
│ │ └── dom4j
│ ├── io
│ │ ├── micrometer
│ │ ├── netty
│ │ ├── opentelemetry
│ │ ├── projectreactor
│ │ ├── prometheus
│ │ ├── rest-assured
│ │ ├── rsocket
│ │ └── zipkin
│ ├── jakarta
│ │ ├── activation
│ │ ├── annotation
│ │ ├── platform
│ │ └── xml
│ ├── javax
│ │ ├── annotation
│ │ ├── enterprise
│ │ ├── inject
│ │ └── servlet
│ ├── junit
│ │ └── junit
│ ├── log4j
│ │ └── log4j
│ ├── logkit
│ │ └── logkit
│ ├── net
│ │ ├── bytebuddy
│ │ ├── java
│ │ └── minidev
│ ├── org
│ │ ├── antlr
│ │ ├── apache
│ │ ├── apiguardian
│ │ ├── assertj
│ │ ├── awaitility
│ │ ├── codehaus
│ │ ├── eclipse
│ │ ├── glassfish
│ │ ├── hamcrest
│ │ ├── infinispan
│ │ ├── iq80
│ │ ├── jboss
│ │ ├── jdom
│ │ ├── jetbrains
│ │ ├── jsoup
│ │ ├── junit
│ │ ├── mockito
│ │ ├── nibor
│ │ ├── objenesis
│ │ ├── opentest4j
│ │ ├── ow2
│ │ ├── seleniumhq
│ │ ├── skyscreamer
│ │ ├── slf4j
│ │ ├── sonatype
│ │ ├── springframework
│ │ ├── testcontainers
│ │ ├── tomlj
│ │ ├── tukaani
│ │ ├── vafer
│ │ ├── xmlunit
│ │ └── yaml
│ ├── oro
│ │ └── oro
│ └── xml-apis
│ └── xml-apis
├── settings.xml
└── wrapper
└── dists
├── apache-maven-3.9.9
└── apache-maven-3.9.9-bin
之前有提到,Spring Boot
工程有个约定大于配置
的说法,默认情况下启动类DemoApplication
应该是其他所有要交给Spring
管理的类的最外层,否则的话在启动类中要增加注解@ComponentScan
或者@ComponentScans
来制定需要Spring
去扫描的路径。
通过这个链接可以看到官方对默认结构的说明:https://docs.spring.io/spring-boot/reference/using/structuring-your-code.html#using.structuring-your-code.using-the-default-package
最后说说那个application.properties
, 如果只是用Spring Boot
编写单个工程的话,用这个就挺好。
如果是要编写微服务工程,最好还是改下后缀,使用application.yaml
,有些list和map的配置在.properties
格式里面看起来很奇怪的。