在上一篇:https://hanbinit.com.cn/post/12 中,老韩通过https://start.spring.io创建了一个基本的Spring Boot工程,并在里面进行了简单的编码,实现了一个对外的/hello接口。

本文来看下Spring Boot工程的包结构。
先看图:

Spring Boot 工程结构图

了解过Maven的朋友可以很快发现,这个结构就是个典型的Maven工程结构。
在这个图中:

  • 红色竖线标记的区域是项目的核心Java代码编写地方,其中DemoApplication.java文件是Spring Boot工程的默认入口;
  • 蓝色竖线标记的区域是放资源文件的地方,其中application.propertiesSpring Boot工程默认的配置文件;
  • 绿色竖线黄色竖线区域分别是测试用例maven配置区域,一般我们只会改动pom.xml文件。另外两个配置文件(mvnw和mvnw.cmd)是不动的,他们是Maven wrapper的一部分。

idea maven默认配置

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格式里面看起来很奇怪的。

标签: Spring Boot 工程结构

添加新评论