📜  Spring Boot——代码结构

📅  最后修改于: 2022-05-13 01:55:22.740000             🧑  作者: Mango

Spring Boot——代码结构

Spring Boot 项目没有特定的布局或代码结构。但是,开发人员遵循的一些最佳实践也将对我们有所帮助。您可以将您的项目到像服务层,实体层,存储库等各层您也可以将项目分成模块。例如,父项目有两个子模块。第一个模块用于数据层,第二个模块用于网络层。您还可以将项目划分为功能。

这是。因为当一个类不包含声明时,它被称为在默认包中。在默认包中包含一个类不是最佳实践。这是因为 Spring 会扫描@ComponentScan@EntityScan@SpringBootApplication等注解中提到的包和子包中的

  • 主要应用类

建议将 Main Application 类放在根包中,并带有@SpringBootApplication@ComponentScan@EnableAutoConfiguration等注释。它允许 Spring 扫描根包和子包中的所有类。例如,如果您正在编写类似于以下布局示例的 JPA 应用程序 MainApplicaiton. Java是放在根包和所有客户相关的类在com.gfg.demo.order子包com.gfg.demo.customer和秩序相关的类。



布局结构如下:

让我们讨论大多数开发人员通常使用的两种方法来构建他们的 Spring Boot 项目。

  1. 按功能划分的结构
  2. 逐层结构

结构 1:按功能

在这种方法中,与某个特性有关的所有类都放在同一个包中。特征外观的结构如下例所示

例子

com
 +- gfg
     +- demo
         +- MyApplication.java
         |
         +- customer
         |   +- Customer.java
         |   +- CustomerController.java
         |   +- CustomerService.java
         |   +- CustomerRepository.java
         |
         +- order
             +- Order.java
             +- OrderController.java
             +- OrderService.java
             +- OrderRepository.java

这种结构的优点如下:

  • 查找要修改的类很容易。
  • 通过删除特定的子包,可以删除与某个特性相关的所有类。
  • 测试和重构很容易。
  • 功能部件可以单独发货。

结构 2:按层

另一种放置类的方法是按层,即;所有控制器都可以放在控制器包中,服务包下的服务和域或模型等下的所有实体。

例子

com
 +- gfg
     +- demo
         +- MyApplication.java
         |
         +- domain
         |   +- Customer.java
         |   +- Order.java
         |
         +- controllers
         |     +- OrderController.java
         |   +- CustomerController.java
         |
         +- services
         |    +- CustomerService.java
         |    +- OrderService.java
         |
         +- repositories
              +- CustomerRepository.java
              +- OrderRepository.java    

虽然上面的结构看起来可行并且很容易按层定位类。与按特征结构相比,它几乎没有缺点。

  • 功能或模块不能单独发货。
  • 很难找到属于某个特征的类。
  • 由于要素类位于每一层,因此对某个要素进行代码重构很困难。
  • 它会导致使用 GitHub、BitBucket 等进行协作的开发人员之间的合并冲突。

现在让我们通过获取 MainApplication 的位置来结束。Java在上面提出的两个结构中,我们已经看到MainApplication. Java放在根包中,带有@SpringBootApplication注解。它如下所示作为示例示例,如下所示:

例子

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

}