Spring Boot项目的推荐软件包结构 - Baeldung


鉴于Spring Boot的注解像@ComponentScan,@EntityScan,@ConfigurationPropertiesScan和@SpringBootApplication基于包结构来定义扫描的位置,在构建新的Spring Boot项目时,我们如何在包中组织类应具有高度的灵活性。

@SpringBootApplication注释触发对于当前包和它的子包组件扫描。因此,项目的主类应驻留在基本包中。这是可配置的,我们仍然可以通过手动指定基本软件包来将其定位在其他位置。但是,在大多数情况下,这是不值得的麻烦,更重要的是,因此基于JPA的项目将需要在主类上添加一些其他注释:

@SpringBootApplication(scanBasePackages = "example.xx.com")
@EnableJpaRepositories(
"example.xx.com")
@EntityScan(
"example.xx.com")

包结构的设计独立于Spring Boot。因此,它应该根据我们项目的需求设计。一种流行的策略是按业务功能打包,它增强了模块性并实现了子包内部私有的可见性。
让我们以PetClinic项目为例。这个项目是由Spring开发人员构建的,目的是说明他们对如何构建普通Spring Boot项目的看法。
它是按功能包进行组织的。因此,我们有一个主要包org.springframework.samples.petclinic和5个子包:

  • org.springframework.samples.petclinic.model
  • org.springframework.samples.petclinic.owner
  • org.springframework.samples.petclinic.system
  • org.springframework.samples.petclinic.vet
  • org.springframework.samples.petclinic.visit

它们中的每一个都代表应用程序的一个领域或功能,将内部的高耦合类分组到一个包内,实现高内聚性。