开发技能SSM & SpringSpring Boot 项目专栏

Spring Boot标准项目结构

resources:资源文件,存放静态文件,模板文件,配置文件

static:存放静态文件

templates:存放模板文件

application.properties:springboot配置文件

Spring工程一般是采用分层思想进行开发,分层优点是每层只专注本层工作做自己最擅长的事情,层与层之间会通过适配器进行通信。分层思想需要满足的规则如下:

+ 单一:每层只处理一类事情,满足单一职责原则
+ 降噪:信息在每一层进行传输,满足最小知识原则,只向下层传输必要信息
+ 适配:每层都需要一个适配器,翻译信息为本层或者下层可以理解的信息
+ 业务:业务对象可以整合业务逻辑
+ 数据:数据对象尽量纯净,尽量不要聚合业务



**SpringBoot工程可以分为九层:**

+ 工具层:util
    - 工具层承载工具代码。不依赖本项目其它模块,只依赖一些通用工具包
+ 整合层:integration
    - 可能会依赖外部服务,那么将外部DTO转换为自己项目可以理解的对象,需要在integration层处理
+ 基础层:infrastructure
    - 基础层核心是承载数据访问,entity实体对象承载在本层。只依赖工具模块
+ 服务层:service
    - 核心代码
+ 领域层:domain
    - 领域对象需要体现业务含义(领域对象采用充血模型聚合业务)、业务对象
    - 业务层可以更加灵活组合不同领域业务,并且可以增加流控、监控、日志、权限,分布式锁等控制,相较于领域层功能更为丰富
+ 门面层:facade
    - 承载对外服务
+ 控制层:controller
    - 作为本项目HTTP接口提供服务,供前端调用
+ 客户端:client
    - 承载数据对外传输对象DTO
+ 启动层:boot
    - 启动层,只有启动入口代码



参考:

1. 应用程序主模块(Application):该模块是整个应用程序的入口点,负责启动和管理其他模块。
2. 依赖项模块(Dependency):该模块包含了应用程序所需的所有依赖项,如Spring Boot Starter、Spring Data等。这些依赖项可以通过Maven或Gradle等构建工具进行管理。
3. 业务逻辑模块(Business):该模块包含了应用程序的核心业务逻辑,通常由多个Spring组件组成,如控制器(Controller)、服务(Service)、实体类(Entity)等。
4. 测试模块(Test):该模块包含了应用程序的单元测试和集成测试代码,以确保应用程序的质量和稳定性。

目录结构:

Spring Boot 工程的主要文件结构包括 **src/main/java 目录****src/main/resources 目录****pom.xml 文件**

  • src/main/java 目录包含了项目的 Java 代码
  • src/main/resources 目录包含了项目的静态资源、配置文件等
  • src/test/java 目录主要放置项目测试用例代码
  • pom.xml 文件是 Maven 的配置文件,用于管理项目的依赖和构建方式

这里估计还有同学会问关于DTO/VO/DO等数据模型定义的区分,参考《阿里巴巴Java开发手册》中定义如下:

  • DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
  • DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
  • BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。
  • AO(Application Object):应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
  • VO(View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
  • Query:数据查询对象,各层接收上层的查询请求。注意超过2个参数的查询封装,禁止使用Map类来传输。

主要流程摘要:

Spring Boot 应用程序通常有一个入口类,我们可以从这个类开始查看工程代码。该类通常被标注为 `**@SpringBootApplication**`,包含了 Spring Boot 应用程序的配置和初始化逻辑。我们可以通过查看启动类,快速了解应用程序的主要配置和初始化过程,以便更好地理解应用程序的整个运行流程。在这一步,我们可以将启动配置中的Main Class配置为该入口类。

在 Spring Boot 工程中,控制器层通常是应用程序的入口点,负责处理 HTTP 请求和响应。我们可以通过查看控制器层的代码,了解应用程序的接口和业务逻辑,并了解数据的传递和处理过程。在源码中,我们可以看到Spring Boot使用 `**@Controller**` 注解来标识控制器类,并使用 `**@RequestMapping**` 注解来指定请求的处理方法。

在 Spring Boot 工程中,服务层通常是应用程序的核心业务逻辑所在。在源码中,我们可以看到Spring Boot使用 `**@Service**` 注解来标识服务类,并定义各种业务逻辑方法。我们可以通过查看服务层的代码,了解应用程序的业务逻辑和数据处理过程,并了解其中使用的技术和框架。

1,命令行参数; 如: java -jar xxx.jar –server.port=80

2,ServletConfig和ServletContext;

3,操作系统环境变量;

4,application-{profile}.properties或者YAML文件;

5,application.properties或者YAML文件;

一般用的比较多的就是直接在application.properties或者YAML配置 , 其次是命令行启动方式

server.port=80  
server.session-timeout=30  
server.tomcat.uri-encoding=UTF-8  
  
spring.datasource.url = jdbc:mysql://localhost:3306/test
spring.datasource.username = root  
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver  
server:  
  port: 80
  session-timeout: 30  
  tomcat.uri-encoding: UTF-8  
  
spring:  
  datasource:  
    url : jdbc:mysql://localhost:3306/test  
    username : root  
    password : 123456 
    driverClassName : com.mysql.jdbc.Driver

application.properties优先级

一个项目中可以有多个application.properties文件存放在不同目录中,此时他们会遵循固定的优先级来处理有冲突的属性配置, 优先级由高到底,高优先级的配置会覆盖低优先级的配置

1.项目/config/application.properties

2.项目/application.properties

3.classpath:config/application.properties

4.classpath:application.properties

Spring Boot设计思路

了解Spring Boot的设计思路可以帮助我们更好地理解和应用该框架

  1. 约定优于配置:Spring Boot通过约定来减少开发者需要手动配置的内容。例如,Spring Boot可以根据环境变量自动配置数据库连接池等组件。
  2. 自动配置:Spring Boot通过自动配置来简化开发过程。它通过扫描应用程序中的各种组件,并根据需要自动配置它们。这使得开发者可以更加专注于实现业务逻辑。
  3. 面向切面编程(AOP):Spring Boot支持面向切面编程,使得开发者可以更加轻松地实现跨模块的功能,如日志记录、性能监控等。
  4. 分布式部署:Spring Boot支持分布式部署,使得应用程序可以更加轻松地扩展和部署到不同的服务器上。
Built with LogoFlowershow