Spring Boot——代码结构
Spring Boot 项目没有特定的布局或代码结构。但是,开发人员遵循的一些最佳实践也将对我们有所帮助。您可以将您的项目到像服务层,实体层,存储库层等各层您也可以将项目分成模块。例如,父项目有两个子模块。第一个模块用于数据层,第二个模块用于网络层。您还可以将项目划分为功能。
Note: Avoid Default Package
这是。因为当一个类不包含包声明时,它被称为在默认包中。在默认包中包含一个类不是最佳实践。这是因为 Spring 会扫描@ComponentScan 、 @EntityScan 、 @SpringBootApplication等注解中提到的包和子包中的类。
Note: It is recommended to use Java’s package naming conventions with a reverse domain name. For example, com.gfg.demo.
- 主要应用类
建议将 Main Application 类放在根包中,并带有@SpringBootApplication或@ComponentScan或@EnableAutoConfiguration等注释。它允许 Spring 扫描根包和子包中的所有类。例如,如果您正在编写类似于以下布局示例的 JPA 应用程序, MainApplicaiton. Java是放在根包和所有客户相关的类在com.gfg.demo.order子包com.gfg.demo.customer和秩序相关的类。
布局结构如下:
让我们讨论大多数开发人员通常使用的两种方法来构建他们的 Spring Boot 项目。
- 按功能划分的结构
- 逐层结构
结构 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);
}
}