本篇文章将从结构框架入手,系统介绍一个完整Java程序的结构步骤,不涉及JAVA基础代码学习。
在本文章中先简单介绍Maven、Spring、MyBatis三种Java类型。
一、分类介绍
首先我们先来了解Java程序的类型,不同类型结构略有区别。Java程序的类型可以根据多个分类方式进行划分,以下是一些常见的分类和简要解释:
-
构建工具类型:
- Maven:用于管理项目的构建、报告和文档的生成。它提供了一种标准化的方法来构建Java项目,包括依赖管理和插件系统。
- Gradle:也是一个构建工具,相比Maven更灵活和可定制化。它使用Groovy或Kotlin作为DSL(领域特定语言),支持增量构建和多项目构建。
-
Web框架类型:
- Spring:一个广泛使用的Java企业级应用开发框架,提供了全面的编程和配置模型。Spring主要关注于依赖注入、AOP(面向切面编程)和模块化开发。
- Struts:一个基于MVC(模型-视图-控制器)模式的Web应用程序框架,帮助开发者创建维护性强的Web应用。
- Play Framework:一个使用Scala和Java编写的Web框架,特点是开发速度快、支持异步编程和实时编译。
-
数据访问类型:
- Hibernate:一个ORM(对象关系映射)框架,帮助开发者将Java对象映射到关系型数据库中,简化了数据库操作。
- MyBatis:另一个流行的持久层框架,提供了SQL映射和POJO(Plain Old Java Object)映射两种方式来访问数据库。
-
测试框架类型:
- JUnit:一个用于编写和运行单元测试的框架,它提供了断言、测试套件和测试运行器等功能。
- TestNG:一个灵活的测试框架,支持多种类型的测试(如单元测试、集成测试、端到端测试等),并提供了强大的报告功能。
++下面我将更详细地解释每种类型,并说明它们之间的联系和通常如何结合使用:++
Maven:
Maven是一个基于项目对象模型(POM)的构建工具。简化了项目的构建、测试和部署过程,并提供了依赖管理、插件系统和生命周期管理等功能。Maven的主要特点是他的约定优于配置的理念。这意味着他会根据定义的规则来处理大部分情况,减少了配置文件的复杂性;
Gradle:Gradle提供了更高的灵活性和定制性。与Maven不同,Gradle使用Groovy或Kotlin作为DSL(领域特定语言),使得构建脚本更加易读和可维护。Gradle支持增量构建和多项目构建,能够更好的处理大型项目;
Spring:Spring是一个全面的Java企业级应用开发框架。最初是作为一个替代EJB(Enterprise JavaBeans)的轻量级解决方案而诞生的。Spring的核心特性包括依赖注入、AOP(面向切面编程)、模块化开发等。Spring的生态系统非常庞大,包含了许多子项目和模块,例如Spring Boot、Spring Data、Spring Security等;
Struts:Struts是一个基于MVC(模型-视图-控制器)模式的Web应用程序框架。它主要用于构建Web应用的前端部分,提供了一个清晰的分层结构来处理请求和响应。Struts框架的特点是易于学习和使用,适合中小型项目;
Play Framework:Play Framework是一个使用Scala和Java编写的Web框架,旨在提供更快的开发速度和更好的开发体验。支持异步编程、实时编译和热重载等功能,适合需要快速迭代和实施反馈的项目;
Hibernate:Hibernate是一个ORM(对象关系映射)框架,他将Java对象与关系型数据库表之间建立映射关系。这样,开发者可以使用面向对象的方式来操作数据库,无需直接编写SQL语句。
Hibernate提供了大量的高级特性,如缓存、延迟加载和二级缓存等;
MyBatis:MyBatis是一个持久层框架,它提供了SQL映射和POJO(Plain Old Java Object)映射两种方式来访问数据库。相比Hibernate,MyBatis更灵活,因为它允许开发者手动编写SQL语句,并且支持存储过程和动态SQL
JUnit:JUnit是一个流行的单元测试框架,用于编写和运行单元测试。它提供了断言、测试套件和测试运行器等功能,帮助开发者验证代码的正确性。JUnit是Java生态系统中最早的测试框架之一,仍然广泛使用
TestNG:TestNG是一个更灵活的测试框架,支持多种类型的测试(如单元测试、集成测试、端到端测试等)。它提供了强大的报告功能和参数化测试能力。TestNG也支持并行测试和分布式测试。
二、结构框架梳理
2.1 Maven
2.1.1 Maven型Java项目结构梳理
Maven型Java项目的经典框架结构通常如下:
1.项目根目录:
- pom.xml:这是Maven的核心配置文件,定义了项目的基本信息、依赖关系、构建过程等
- src/:源代码根目录,包含所有的Java、资源文件和测试文件
- target/:编译后的输出目录,包含编译生成的类文件、JAR文件等
2.src目录结构:
- main/:存放项目的主要源代码和资源文件
- java/:Java源代码的根目录
- resources/:非Java文件的资源,例如配置文件、图像等
- test/:存放项目的测试源代码和资源文件
3.pom.xml文件结构:
- <project>:定义了整个项目的基本信息
- <groupId>:项目的组标识
- <artifactId>:项目的构件标识
- <version>:项目的版本
- <packaging>:项目的打包类型,如JAR、WAR等
- <dependncies>:定义了项目依赖的其他项目或库
- <build>:定义了项目的构建过程,包括编译、测试、打包等步骤
- <piugins>:配置了Maven使用的插件,例如编译插件、测试插件等
4.依赖管理:
Maven通过pom.xml文件中的<dependencies>元素来管理项目的依赖关系。每个依赖项都需要指定以下信息:
- <groupId>:依赖想所属的组标识
- <artifactId>:依赖项的构件标识
- <version>:依赖项的版本
Maven会自动下载这些依赖项,确保项目的构件和运行环境一致
5.构件生命周期:
Maven定义了一系列构件阶段,称为生命周期。每个生命周期包含多个阶段,例如:
- validate:验证项目是否正确配置
- compile:编译项目的源代码
- test:运行项目的单元测试
- package:打包项目的成果物
- install:将项目的成果物安装到本地仓库
- deploy:将项目的成果物部署到远程仓库
2.1.2 Maven型Java结构树
以"检测文件敏感程度"这一场景举例,解释下述结构树
sensitive-file-detector/
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ ├── SensitiveFileDetector.java
│ │ ├── FileAnalyzer.java
│ │ └── SensitiveContentChecker.java
│ └── resources/
│ └── sensitive_keywords.txt
└── test/
├── java/
│ └── com/
│ └── example/
│ ├── SensitiveFileDetectorTest.java
│ ├── FileAnalyzerTest.java
│ └── SensitiveContentCheckerTest.java
└── resources/
└── test_sensitive_keywords.txt
- sensitive-file-detector/:工程名作为根目录
- src/:源码目录
- main/:主程序目录
- java/:主程序的Java源文件目录,例如本例中包含三个Java程序
- resources/:主程序的资源源文件目录,例如本例中存放要进行分析的文件
- test/:测试程序目录,基本结构同上
2.2 Spring
2.2.1 Spring型Java项目结构梳理
以下是 Spring 型 Java 项目的典型框架结构:
1.项目根目录:
- pom.xml:这是Maven项目的核心配置,定义了项目的基本信息、依赖关系、构建过程等
- src/:源代码的根目录,包含所有的Java、资源文件和测试文件
- target/:编译后的输出目录,包含了编译生成的类文件、JAR文件等
2.src目录结构:
- main/:存放项目的主要源代码和资源文件
- java/:Java源代码的根目录
- resources/:非Java文件的资源,例如配置文件、图像等
- application.properties:Spring Boot应用程序的默认配置文件
- application.yml:另一种格式的Spring Boot应用程序配置文件
- static/:静态资源文件夹,用于存放Web应用程序的静态资源
- templates/:模版文件夹,用于存放Thymeleaf获其他模版引擎的模版文件
- test/:存放项目的测试源代码和资源文件
3.pom.xml文件结构:
pom.xml文件的基本结构同上,可参考maven的基本结构
4.Spring Boot应用程序结构:
@SpringBootApplication
:标注在主类上,表示这是一个 Spring Boot 应用程序Controller
、@RestController
、@Service
、@Repository
等注解:用于定义控制器、服务和数据访问层的组件application.properties
或application.yml
:Spring Boot 应用程序的配置文件,用于配置数据库连接、服务器端口号等信息index.html
或其他静态资源文件:存放在src/main/resources/static
目录下,用于提供 Web 应用程序的静态内容templates
目录下的模板文件:用于渲染动态 Web 页面
5.依赖管理
Spring 项目通常依赖于多个 Spring 框架的组件,例如 Spring Core、Spring Web、Spring Data JPA 等。这些依赖关系可以在 pom.xml
文件中通过 <dependencies>
元素进行管理
6.测试
Spring 项目的测试通常使用 JUnit 和 Spring TestContext Framework。测试类需要使用 @RunWith(SpringRunner.class)
和 @ContextConfiguration
注解来配置测试环境
2.2.2 Spring型Java结构树
sensitive-file-detector/
├── pom.xml
└── src/
├── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ ├── SensitiveFileDetectorApplication.java
│ │ ├── service/
│ │ │ └── SensitiveFileService.java
│ │ ├── repository/
│ │ │ └── SensitiveFileRepository.java
│ │ └── util/
│ │ └── FileUtil.java
│ └── resources/
│ ├── application.properties
│ └── sensitive_keywords.txt
└── test/
├── java/
│ └── com/
│ └── example/
│ ├── SensitiveFileDetectorApplicationTests.java
│ ├── SensitiveFileServiceTest.java
│ └── SensitiveFileRepositoryTest.java
└── resources/
└── test_sensitive_keywords.txt
SensitiveFileService.java
: 这是一个服务类,负责调用其他组件来实现业务逻辑。例如,它可能调用SensitiveFileRepository
来读取敏感词汇列表,并调用FileUtil
来读取文件内容SensitiveFileRepository.java
: 这是一个数据访问层的接口,定义了读取敏感词汇列表的方法。它可能使用 Spring Data JPA 或其他技术来实现数据存储和检索FileUtil.java
: 这是一个实用工具类,提供了读取文件内容的方法。它可以帮助服务层或控制器层读取文件application.properties
: 这是一个 Spring Boot 应用程序的配置文件,用于配置数据库连接、服务器端口号等信息sensitive_keywords.txt
: 这是一个文本文件,包含了敏感词汇列表SensitiveFileDetectorApplicationTests.java
: 这是一个集成测试类,用于测试整个应用程序的功能SensitiveFileServiceTest.java
和SensitiveFileRepositoryTest.java
: 这些是单元测试类,分别用于测试服务层和数据访问层的组件test_sensitive_keywords.txt
: 这是一个用于测试的敏感词汇列表文件
2.3 MyBatis
2.3.1 MyBatis型Java项目结构梳理
MyBatis是一个流行的持久化框架,提供了对数据库的抽象和操作。以下是MyBatis型Java项目的典型框架结构:
1.项目根目录:
- pom.xml:Maven的核心配置文件,与上面相同,这里不多赘述
- src/:源代码根目录,包含所有的Java、资源文件和测试文件
- target/:这是编译后的输出目录,包含了编译生成的类文件、JAR文件等
2.src目录结构:
- main/:存放项目的主要源代码和资源文件
- java/:Java源代码的根目录
- resources/:测试用的非Java文件资源
mybatis-config.xml
:MyBatis 的全局配置文件application.properties
或application.yml
:Spring Boot 应用程序的配置文件,用于配置数据库连接等信息mapper/
:存放 MyBatis 的映射文件(*.xml)目录test/
:存放项目的测试源代码和资源文件
3.pom.xml
pom.xml结构同上
4.MyBatis配置文件结构
<configuration>
:配置文件的根元素。<settings>
:全局设置,例如日志级别、缓存等。<typeAliases>
:类型别名,用于简化 Java 类型和数据库表的映射。<typeHandlers>
:类型处理器,用于处理特定类型的数据。<objectFactory>
:对象工厂,用于创建结果对象。<plugins>
:插件配置,例如分页插件等
5.MyBatis映射文件结构
<mapper>
:映射文件的根元素。<select>
、<insert>
、<update>
和<delete>
:定义了对数据库的操作,例如查询、插入、更新和删除。<resultMap>
:结果映射,用于将查询结果映射到 Java 对象。<parameterMap>
:参数映射,用于将方法参数映射到 SQL 语句中的参数
6.依赖管理
MyBatis 项目通常依赖于多个组件,例如 MyBatis 本身、数据库驱动程序等。这些依赖关系可以在 pom.xml
文件中通过 <dependencies>
元素进行管理
7.测试
MyBatis 项目的测试通常使用 JUnit 和 Spring TestContext Framework。测试类需要使用 @RunWith(SpringRunner.class)
和 @ContextConfiguration
注解来配置测试环境