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

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

c431a108708a1289278ce7da1f31c0b.png

9.1 Maven 和 Gradle - 构建与依赖管理的神兵利器

在Java的世界里,Maven和Gradle是两位强大的法师,专门负责管理构建和依赖,确保开发者能够专注于编码而不是琐碎的构建细节。

9.1.1 基础知识

  • Maven:通过pom.xml文件管理项目的生命周期、依赖、插件等。它遵循“约定优于配置”的原则,简化了项目构建过程。
  • Gradle:基于Groovy的DSL(领域特定语言)进行项目配置,提供了更高的灵活性和强大的性能。它允许开发者编写更简洁的构建脚本。

9.1.2 重点案例:使用 Maven 构建 Spring Boot 应用

让我们开始一个新的探险,使用Maven来构建一个简单的Spring Boot应用。

步骤:

  1. 创建pom.xml文件,并添加Spring Boot起步依赖。
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.adventure</groupId>
    <artifactId>spring-boot-quest</artifactId>
    <version>1.0.0</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>
  1. 创建主类AdventureApplication.java,并运行Spring Boot应用。
package com.adventure;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AdventureApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdventureApplication.class, args);
    }
}

9.1.3 拓展案例 1:使用 Gradle 构建多模块项目

在一个更大的探险中,你可能需要将你的项目分成多个模块。Gradle提供了强大的多项目构建支持。

根项目的build.gradle:

allprojects {
    group 'com.adventure'
    version '1.0.0'
}
subprojects {
    apply plugin: 'java'
}
project(':library') {
    dependencies {
        // 依赖配置
    }
}
project(':application') {
    dependencies {
        implementation project(':library')
    }
}

设置模块:

在根项目的settings.gradle文件中声明模块。

rootProject.name = 'multi-module-adventure'
include 'application', 'library'

9.1.4 拓展案例 2:利用 Gradle Wrapper 确保构建的一致性

Gradle Wrapper是一个脚本和库的集合,它允许你不需要预先安装Gradle就能构建你的项目。这保证了每个开发者和CI/CD环境使用相同版本的Gradle,避免了“在我的机器上可以运行”的问题。

生成Gradle Wrapper:

在项目根目录执行以下命令:

gradle wrapper --gradle-version 6.3

这会生成gradlewgradlew.bat脚本以及gradle/wrapper目录,你可以将这些文件加入版本控制。

使用Gradle Wrapper构建项目:

./gradlew build

通过这些案例,你已经学会了如何使用Maven和Gradle这两位强大的法师来管理你的Java项目。它们不仅可以帮助你轻松地构建和管理项目,还能确保项目的构建过程简洁高效。现在,带上这些神兵利器,继续你的Java冒险吧!


9.2 Spring 框架概述 - Java 世界的魔法园林

Spring框架是Java开发中的一片魔法园林,它提供了一系列的魔法(框架特性)来帮助开发者高效地创建企业级应用。从依赖注入、面向切面编程到操作数据和构建Web应用,Spring让这一切变得简单而优雅。

9.2.1 基础知识

  • 依赖注入(DI):Spring的核心特性,允许你通过声明方式而非硬编码方式来管理组件之间的依赖关系,增加了代码的灵活性和可测试性。
  • 面向切面编程(AOP):允许你定义通用的逻辑(如事务管理和安全),并将这些逻辑应用到多个点,减少了代码的重复。
  • Spring MVC:一个强大的构建Web应用的框架,它提供了一种分离控制器、模型对象、和视图的方法,使得Web应用的开发变得更加清晰和简单。
  • Spring Boot:在Spring的基础上进一步简化了配置和部署的流程,让开发者可以快速启动新项目。

9.2.2 重点案例:构建 RESTful Web 服务

我们将使用Spring Boot来构建一个简单的RESTful Web服务,展示如何快速开发和部署一个Spring应用。

步骤:

  1. 创建一个新的Spring Boot项目。
  2. 添加spring-boot-starter-web依赖。
  3. 创建一个新的RestController来处理HTTP请求。

示例代码:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class MagicGardenApplication {
    public static void main(String[] args) {
        SpringApplication.run(MagicGardenApplication.class, args);
    }
    @GetMapping("/hello")
    public String sayHello() {
        return "Welcome to the Magic Garden of Spring!";
    }
}

9.2.3 拓展案例 1:使用 Spring Data JPA 操作数据库

Spring Data JPA让操作数据库变得轻松愉快,我们将通过一个简单的例子来展示如何使用Spring Data JPA来持久化数据到数据库。

步骤:

  1. 添加spring-boot-starter-data-jpa和数据库驱动的依赖。
  2. 创建一个实体类和一个Repository接口。
  3. 使用Repository接口进行数据操作。

示例代码:

import org.springframework.data.jpa.repository.JpaRepository;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Adventure {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    // Getters and setters omitted for brevity
}
public interface AdventureRepository extends JpaRepository<Adventure, Long> {
}

9.2.4 拓展案例 2:利用 Spring Security 增强应用安全

Spring Security提供了一系列强大的安全特性,帮助你保护你的应用免受常见安全威胁。我们将展示如何添加基本的HTTP认证。

步骤:

  1. 添加spring-boot-starter-security依赖。
  2. 创建一个WebSecurityConfigurerAdapter的实现,来配置安全策略。

示例代码:

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests().anyRequest().authenticated()
            .and()
            .httpBasic();
    }
}

通过以上案例,你已经学会了如何使用 Spring 框架来快速开发一个 RESTful Web 服务,如何使用 Spring Data JPA 操作数据库,以及如何利用 Spring Security 增强应用的安全性。Spring 框架的魔法园林中藏着无尽的可能,探索它们将使你的 Java 开发之旅充满乐趣和惊喜。


9.3 JUnit 测试 - 保证你的魔法不会走火

在Java世界的冒险中,编写魔法(代码)是一件充满乐趣的事情,但要确保每次施法都能精准有效,就需要一位可靠的法术校验师——这就是JUnit测试的角色。通过JUnit测试,我们可以确保我们的魔法(代码逻辑)正如我们所期望的那样工作,避免在实际使用中出现意外。

9.3.1 基础知识

  • JUnit 5:是当前最新的Java测试框架版本,提供了更加强大和灵活的测试特性,包括但不限于显示名称的测试、动态测试、参数化测试以及更多的生命周期回调。
  • 断言:JUnit提供了一系列的断言方法,用于验证测试结果是否符合预期,是测试中最常用的工具之一。
  • 测试注解:JUnit 5引入了一系列新的注解来支持更复杂的测试场景,如@BeforeEach@AfterEach@BeforeAll@AfterAll@Test等。

9.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.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class CalculatorTest {
    private final Calculator calculator = new Calculator();
    @Test
    void testAdd() {
        assertEquals(5, calculator.add(2, 3), "2 + 3 should equal 5");
    }
    @Test
    void testSubtract() {
        assertEquals(1, calculator.subtract(3, 2), "3 - 2 should equal 1");
    }
}

9.3.3 拓展案例 1:使用参数化测试

当我们需要对同一方法使用不同的参数进行测试时,参数化测试可以大大简化测试代码。

ParameterizedCalculatorTest.java:

import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
public class ParameterizedCalculatorTest {
    private final Calculator calculator = new Calculator();
    @ParameterizedTest
    @CsvSource({"2, 3, 5", "3, 5, 8", "-1, -2, -3"})
    void testAdd(int a, int b, int expectedResult) {
        assertEquals(expectedResult, calculator.add(a, b),
            () -> a + " + " + b + " should equal " + expectedResult);
    }
}

9.3.4 拓展案例 2:模拟外部依赖

在测试时,经常需要模拟外部依赖,以确保测试的独立性。我们可以使用Mockito框架来模拟这些依赖。

假设我们的计算器现在需要记录每次计算的结果,我们将模拟这个记录器。

CalculatorWithLoggerTest.java:

import static org.mockito.Mockito.*;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(MockitoExtension.class)
public class CalculatorWithLoggerTest {
    @Mock
    private Logger logger;
    @Test
    void testAdd() {
        Calculator calculator = new Calculator(logger);
        calculator.add(2, 3);
        verify(logger).log("Adding 2 + 3");
    }
}

通过这些案例,你已经学会了如何使用JUnit进行基本测试、参数化测试以及如何在测试中模拟外部依赖。这些技巧将帮助你确保你的Java代码更加健壮、可靠。记住,一个好的魔法师不仅仅会施法,还会确保每次施法都是安全可控的。

目录
相关文章
|
2月前
|
Java 容器
java集合框架复习----(1)
这篇文章提供了Java集合框架的复习资料,包括集合的概念、Collection接口的使用,以及如何通过代码示例演示集合的操作,如增加、删除元素,以及遍历集合元素。
java集合框架复习----(1)
|
2月前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
35 1
|
11天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
554 6
|
10天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
20 2
|
15天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
31 5
|
16天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
2月前
|
Java 开发工具
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
这篇文章讲述了作者在升级JDK至17版本后遇到IDEA无法识别`tools.jar`的问题,并提供了两种解决方法:升级IDEA版本或降低JDK版本,并提供了相关版本的IDEA兼容性信息。
开发工具系类 之 Cannot determine path to ‘tools.jar‘ library for 17 (D:/Program Files/Java/jdk-17.0.9)
|
2月前
|
存储 安全 Java
java集合框架复习----(2)List
这篇文章是关于Java集合框架中List集合的详细复习,包括List的特点、常用方法、迭代器的使用,以及ArrayList、Vector和LinkedList三种实现类的比较和泛型在Java中的使用示例。
java集合框架复习----(2)List
|
2月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
1月前
|
Java 数据库连接 Apache
Java进阶-主流框架总结与详解
这些仅仅是 Java 众多框架中的一部分。每个框架都有其特定的用途和优势,了解并熟练运用这些框架,对于每一位 Java 开发者来说都至关重要。同时,选择合适框架的关键在于理解框架的设计哲学、核心功能及其在项目中的应用场景。随着技术的不断进步,这些框架也在不断更新和迭代以适应新的开发者需求。
39 1
下一篇
无影云桌面