《Java 简易速速上手小册》第5章:Java 开发工具和框架(2024 最新版)

文章目录
- 5.1 Maven 和 Gradle - 构建你的堡垒
- 5.1.1 基础知识
- 5.1.2 重点案例:使用 Maven 构建一个简单的 Java 应用
- 5.1.3 拓展案例 1:使用 Gradle 构建一个 Spring Boot 应用
- 5.1.4 拓展案例 2:使用 Maven 管理多模块项目
- 5.2 Spring 框架 - 你的魔法棒
- 5.2.1 基础知识
- 5.2.2 重点案例:创建一个简单的 Spring Boot Web 应用
- 5.2.3 拓展案例 1:访问数据库
- 5.2.4 拓展案例 2:添加安全性
- 5.3 JUnit 测试 - 保卫你的堡垒
- 5.3.1 基础知识
- 5.3.2 重点案例:测试一个简单的计算器类
- 5.3.3 拓展案例 1:使用 Mock 对象测试
- 5.3.4 拓展案例 2:参数化测试
5.1 Maven 和 Gradle - 构建你的堡垒
在 Java 的世界里,Maven 和 Gradle 就像是构建和维护你的代码堡垒的得力助手。它们管理依赖、编译代码、运行测试和打包应用,确保你的开发过程既高效又无痛。
5.1.1 基础知识
-
Maven:Maven 使用基于 XML 的
pom.xml文件来管理项目的构建、报告和文档。它遵循"约定优于配置"的原则,意味着如果你遵循它的默认配置,就几乎不需要做额外的配置工作。 -
Gradle:Gradle 是一个基于 Groovy 的构建工具,使用
build.gradle文件来编写构建脚本。它结合了 Maven 的约定优于配置的原则和 Ant 的灵活性,同时引入了基于 Groovy 的 DSL(领域特定语言),使得构建脚本更加简洁和强大。
5.1.2 重点案例:使用 Maven 构建一个简单的 Java 应用
假设我们要创建一个简单的 Java 应用,这个应用依赖于 Google Guava 库。
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-application</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version></dependency></dependencies>
</project>
这个 pom.xml 文件定义了一个项目和一个依赖。Maven 会自动下载和管理这个依赖,让你可以轻松使用 Guava 库的功能。
5.1.3 拓展案例 1:使用 Gradle 构建一个 Spring Boot 应用
Spring Boot 应用的构建和部署可以通过 Gradle 来简化。假设我们要创建一个简单的 Spring Boot Web 应用。
build.gradle:
plugins {id 'org.springframework.boot' version '2.4.1'id 'java'
}group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'repositories {mavenCentral()
}dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'
}test {useJUnitPlatform()
}
这个 build.gradle 文件使用了 Spring Boot Gradle 插件来简化 Spring 应用的构建和打包过程。
5.1.4 拓展案例 2:使用 Maven 管理多模块项目
在大型项目中,你可能需要将你的项目分解成多个模块,每个模块负责不同的任务。Maven 支持多模块项目的构建,让你可以在一个父项目中管理多个子项目。
父项目的 pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0</version><packaging>pom</packaging><modules><module>module1</module><module>module2</module></modules>
</project>
每个子模块都会有自己的 pom.xml 文件,但它们都是父项目的一部分,可以共享依赖和插件配置。
通过这些案例,我们可以看到 Maven 和 Gradle 如何成为 Java 开发中不可或缺的工具,帮助你高效地管理项目依赖、构建和打包应用。无论是简单的单一应用还是复杂的多模块项目,它们都能让你的开发过程更加顺畅。现在,穿上你的斗篷,开始你的构建之旅吧!

5.2 Spring 框架 - 你的魔法棒
Spring框架,就像是赋予了Java开发者超能力的魔法棒,让复杂的企业级应用开发变得简单而优雅。它提供了一套全面的编程和配置模型,支持现代Java应用的全方位开发需求。
5.2.1 基础知识
-
IoC 容器(Inversion of Control):Spring的核心是其IoC容器,它管理应用中对象的创建、配置和管理。通过依赖注入(DI),对象之间的依赖关系在运行时自动解决,减少了代码耦合。
-
AOP(面向切面编程):Spring支持AOP,允许开发者定义横切关注点(如日志、事务管理),从而提高模块化。
-
Spring MVC:一个用于构建Web应用的强大框架,基于Model-ViewController(模型-视图-控制器)架构。
-
Spring Boot:简化了基于Spring的应用开发,提供了大量自动配置,使得项目启动和配置更加容易。
5.2.2 重点案例:创建一个简单的 Spring Boot Web 应用
假设我们要创建一个简单的Web应用,用于返回“Hello, World!”消息。
Spring Boot 应用主类:
@SpringBootApplication
public class HelloWorldApplication {public static void main(String[] args) {SpringApplication.run(HelloWorldApplication.class, args);}@RestControllerpublic static class HelloWorldController {@GetMapping("/")public String hello() {return "Hello, World!";}}
}
在这个例子中,@SpringBootApplication启动了Spring的自动配置和Spring应用上下文。HelloWorldController是一个简单的REST控制器,通过@RestController和@GetMapping注解定义,当访问根URL时,返回“Hello, World!”。
5.2.3 拓展案例 1:访问数据库
使用Spring Data JPA简化数据库操作,自动实现数据访问层。
@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;private String name;// Getters and setters omitted for brevity
}@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserRepository userRepository;@GetMappingpublic List<User> listUsers() {return userRepository.findAll();}
}
在这个例子中,User类通过@Entity注解映射到数据库表。UserRepository接口继承JpaRepository,提供了丰富的数据访问方法。UserController通过注入UserRepository来访问用户数据,并通过REST API暴露出来。
5.2.4 拓展案例 2:添加安全性
使用Spring Security添加基本的认证和授权。
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().anyRequest().authenticated().and().formLogin().and().httpBasic();}
}
在这个例子中,WebSecurityConfig类通过@EnableWebSecurity注解启用了Web安全性,并通过重写configure方法配置了HTTP请求的安全性。所有的请求都需要认证,支持表单登录和HTTP基本认证。
通过这些案例,我们可以看到Spring框架和Spring Boot如何让企业级应用的开发变得更加简单和高效。从创建RESTful服务、操作数据库到加强安全性,Spring都提供了强大的支持。掌握Spring,让你的Java开发之旅充满魔法和可能!

5.3 JUnit 测试 - 保卫你的堡垒
在软件开发的世界中,写代码就像是建造一座堡垒,而JUnit测试则是那些守卫堡垒的勇士,确保每一块石头都牢固可靠。JUnit是Java开发中最流行的单元测试框架之一,它提供了一套简单的注解和断言来帮助开发者编写和执行测试,从而确保代码的质量和稳定性。
5.3.1 基础知识
-
基本注解:
@Test:标记一个方法为测试方法。@Before/@BeforeEach:在每个测试方法执行前运行。@After/@AfterEach:在每个测试方法执行后运行。@BeforeClass/@BeforeAll:在所有测试开始前只运行一次。@AfterClass/@AfterAll:在所有测试结束后只运行一次。
-
断言:JUnit提供了一系列的断言方法来检查测试结果是否符合预期,如
assertEquals(),assertTrue(),assertNotNull()等。
5.3.2 重点案例:测试一个简单的计算器类
假设我们有一个简单的计算器类,提供了加法和减法操作。我们将编写单元测试来验证这些功能。
Calculator.java:
public class Calculator {public int add(int a, int b) {return a + b;}public int subtract(int a, int b) {return a - b;}
}
CalculatorTest.java:
import static org.junit.Assert.*;
import org.junit.Test;public class CalculatorTest {private Calculator calculator = new Calculator();@Testpublic void testAdd() {assertEquals(5, calculator.add(2, 3));}@Testpublic void testSubtract() {assertEquals(1, calculator.subtract(3, 2));}
}
在这个案例中,我们为Calculator类的add和subtract方法编写了单元测试,使用assertEquals断言来验证方法的返回值是否符合预期。
5.3.3 拓展案例 1:使用 Mock 对象测试
在复杂的应用中,某些类的测试可能依赖于其他组件。为了隔离测试,我们可以使用Mock对象来模拟这些依赖。
假设我们有一个UserService类,它依赖于UserRepository。我们可以使用Mockito来模拟UserRepository。
UserServiceTest.java:
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.junit.runner.RunWith;@RunWith(MockitoJUnitRunner.class)
public class UserServiceTest {@Mockprivate UserRepository userRepository;@InjectMocksprivate UserService userService;@Testpublic void testFindUserById() {when(userRepository.findUserById(1)).thenReturn(new User(1, "Alice"));User user = userService.findUserById(1);assertEquals("Alice", user.getName());}
}
5.3.4 拓展案例 2:参数化测试
当我们需要对同一方法使用不同的输入值进行多次测试时,可以使用JUnit的参数化测试功能。
StringHelperTest.java:
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.Test;
import static org.junit.Assert.*;@RunWith(Parameterized.class)
public class StringHelperTest {private String input;private String expectedOutput;public StringHelperTest(String input, String expectedOutput) {this.input = input;this.expectedOutput = expectedOutput;}@Parameterized.Parameterspublic static Collection<Object[]> testConditions() {return Arrays.asList(new Object[][] {{"AACD", "CD"},{"ACD", "CD"}});}@Testpublic void testRemoveAInFirst2Positions() {assertEquals(expectedOutput, StringHelper.removeAInFirst2Positions(input));}
}
通过这些案例,我们看到JUnit测试如何成为Java开发者守卫代码质量的强大工具。它不仅可以帮助我们确保代码的正确性,还能使重构和维护变得更加容易。记得经常运行你的测试勇士们,让你的代码堡垒坚不可摧!
相关文章:
《Java 简易速速上手小册》第5章:Java 开发工具和框架(2024 最新版)
文章目录 5.1 Maven 和 Gradle - 构建你的堡垒5.1.1 基础知识5.1.2 重点案例:使用 Maven 构建一个简单的 Java 应用5.1.3 拓展案例 1:使用 Gradle 构建一个 Spring Boot 应用5.1.4 拓展案例 2:使用 Maven 管理多模块项目 5.2 Spring 框架 - 你…...
Python json解析
在Python中解析JSON(JavaScript Object Notation)非常简单,标准库中的json模块提供了必要的功能。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 以下是使用Python解析JSON的一些基本…...
[FFmpeg学习]从视频中获取图片
从视频中获取图片是一个比较直观的例子,这里从一个基础的例子来查看FFmpeg相关api的使用,从mp4文件中获取一帧图像,保存为jpeg格式图片,mp4文件比较好准备,一般手机录屏文件就是mp4格式。 原理还是比较清楚࿰…...
Redis集中管理Session和系统初始化参数详解
Redis 是一个开源的、基于内存的键值存储系统,通常用作数据库、缓存或消息传递系统。在 Web 应用程序中,Redis 常用于集中管理 Session 数据和系统初始化参数。 Redis 管理 Session Session 是 Web 应用程序中用于保持用户状态的一种机制…...
[网鼎杯 2020 朱雀组]phpweb
抓包发现两个参数,结合报文返回的warning猜测两个参数一个传函数名,另一个传函数参数 尝试直接system(ls /),发现被过滤了 file_get_contents获取index.php的源码,发现可以反序列化实现RCE 这里复现的时候不知道为什么显示不全…...
情人节html代码
一、一个带有心形和祝福消息的页面 如果想在网页上创建一个简单的情人节祝福,可以使用HTML和CSS。以下是一个简单的例子,它创建了一个带有心形和祝福消息的页面: <!DOCTYPE html> <html> <head> <title>情人节…...
键盘重映射禁用 CtrlAltDel 键的利弊
目录 前言 一、Scancode Map 的规范 二、禁用 CtrlAltDel 的方法及其缺陷 三、编程实现和测试 3.1 C 实现的简易修改工具 3.2 C# 实现的窗口工具 四、总结 本文属于原创文章,转载请注明出处: https://blog.csdn.net/qq_59075481/article/details…...
【网工】华为设备命令学习(综合实验一)
实验要求和实验成果如图所示。 LSW2不需要其他配置,其下就一台设备,不需要区分。 LSW3配置如下: <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]un in en //关闭系统提示信息 Info: Information …...
JavaScript中的常见算法
一.排序算法 1.冒泡排序 冒泡排序比较所有相邻的两个项,如果第一个比第二个大,则交换它们。元素项向上移动至 正确的顺序,就好像气泡升至表面一样。 function bubbleSort(arr) {const { length } arrfor (let i 0; i < length - 1; i)…...
桥接模式:连接抽象与实现的设计艺术
桥接模式:连接抽象与实现的设计艺术 在软件开发中,设计模式是帮助我们以优雅的方式解决问题的模板。桥接模式(Bridge Pattern)是一种结构型设计模式,它的主要目标是将抽象部分与实现部分分离,这样两者可以…...
C语言——oj刷题——字符串左旋
问题: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 实现: 当我们谈到字符串左旋时,我们指的是将字符串中的字符向左移动一定数量的位置。这个问题在编程中…...
神经网络(Nature Network)
最近接触目标检测较多,再此对最基本的神经网络知识进行补充,本博客适合想入门人工智能、其含有线性代数及高等数学基础的人群观看 1.构成 由输入层、隐藏层、输出层、激活函数、损失函数组成。 输入层:接收原始数据隐藏层:进行…...
【Unity】QFramework通用背包系统优化:使用Odin优化编辑器
前言 在学习凉鞋老师的课程《QFramework系统设计:通用背包系统》第四章时,笔者使用了Odin插件,对Item和ItemDatabase的SO文件进行了一些优化,使物品页面更加紧凑、更易拓展。 核心逻辑和功能没有改动,整体代码量减少…...
基本算法--贪心
1.简述 贪心法的效率非常高,复杂度常常为O(1),是一种局部最优的解题方法,而很多问题都需要求全局最优,,所以在使用贪心法之前需要评估是否能从局部最优推广到全局最优。 2.思路 作为算法的贪…...
13. 串口接收模块的项目应用案例
1. 使用串口来控制LED灯工作状态 使用串口发送指令到FPGA开发板,来控制第7课中第4个实验的开发板上的LED灯的工作状态。 LED灯的工作状态:让LED灯按指定的亮灭模式亮灭,亮灭模式未知,由用户指定,8个变化状态为一个循…...
Python re找到特定pattern并将此pattern重复n次
要找到字符串s中的数字,并将这些数字重复3次: import re s "abc123def456ghi789" # 找到所有的数字 numbers re.findall(r\d, s) # 重复每个数字3次 repeated_numbers [num * 3 for num in numbers] # 将重复的数字放回原位置 #…...
ChatGpt报错:We ran into an issue while authenticating you解决办法
在登录ChatGpt时报错:Oops!,We ran into an issue while authenticating you.(我们在验证您时遇到问题),记录一下解决过程。 完整报错: We ran into an issue while authenticating you. If this issue persists, please contact…...
如何从 iPhone 恢复已删除的视频:简单有效方法
无论您是在尝试释放空间时不小心删除了 iPhone 上的视频,还是在出厂时清空了手机,现在所有数据都消失了,都不要放弃。有一些方法可以恢复这些视频。 在本文中,我们将向您展示六种最有效的数据恢复方法,可以帮助您从 i…...
【python量化交易】qteasy使用教程02 - 获取和管理金融数据
qteasy教程2 - 获取并管理金融数据 qteasy教程2 - 获取并管理金融数据开始前的准备工作获取基础数据以及价格数据下载交易日历和基础数据查看股票和指数的基础数据下载沪市股票数据从本地获取股价数据生成K线图 数据类型的查找定期下载数据到本地回顾总结 qteasy教程2 - 获取并…...
数据库学习案例20240206-ORACLE NEW RAC agent and resource关系汇总。
1 集群架构图 整体集群架构图如下: 1 数据库启动顺序OHASD层面 操作系统进程init.ohasd run启动ohasd.bin init.ohasd run 集群自动启动是否被禁用 crsctl enable has/crsGIHOME所在文件系统是否被正常挂载。管道文件npohasd是否能够被访问, cd /var/t…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
