Spring boot从0到1 - day01

news/2024/9/19 14:51:28 标签: spring boot, java, 经验分享

前言

Spring 框架作为 Java 领域中最受欢迎的开发框架之一,提供了强大的支持来帮助开发者构建高性能、可维护的 Web 应用。

学习目标

Spring 基础

  • Spring框架是什么?
  • Spring IoC与Aop怎么理解?

Spring Boot 的快速构建

Spring 基础

学习Spring Boot 之前了解Spring。

为什么要了解Spring?
Spring Boot 是基于 Spring 框架之上构建的,它利用了 Spring 框架的许多核心功能,如依赖注入(Dependency Injection, DI)、面向切面编程(Aspect-Oriented Programming, AOP)等。

当你在使用 Spring Boot 开发应用程序时,可能会遇到各种问题。了解 Spring 框架的基本原理可以帮助你更快地定位和解决问题。例如,如果你了解 Spring 的依赖注入机制,就可以更容易地排查 Bean 的创建和销毁过程中的问题。

Spring框架是什么?

Spring 框架是一个轻量级的开源 Java 框架,用于构建企业级应用程序。它最初由 Rod Johnson 创建,并首次出现在他的书《Expert One-On-One J2EE Development and Design》中。Spring 的设计目的是简化 Java 应用程序的开发,尤其是企业级应用的复杂性。

Spring 框架的特点
  1. 轻量级

    • Spring 被称为轻量级框架,因为它不强制使用特定的类库或 API,也不要求特定的部署环境。这意味着 Spring 应用程序可以独立运行,也可以作为 Web 应用程序的一部分运行。
  2. 控制反转(IoC)

    • Spring 提供了 IoC 容器,用于管理对象之间的依赖关系。开发者可以将对象创建和依赖关系的管理交给 Spring 容器,从而实现解耦。
  3. 面向切面编程(AOP)

    • Spring 支持 AOP,允许开发者以非侵入性的方式增强服务。AOP 可以帮助解决 Java 企业级编程中的常见问题,如事务管理、日志记录等。
  4. 声明式事务管理

    • Spring 提供了声明式事务管理的支持,使得开发者可以从复杂的事务管理代码中解放出来,从而提高开发效率。
  5. 模块化

    • Spring 框架由多个模块组成,每个模块都可以独立存在或与其他模块结合使用。这提供了灵活性,让开发者可以选择需要的功能。
  6. 开源

    • Spring 是一个开源框架,意味着它可以免费使用,并且源代码可供查看和修改。
为什么 Spring 是轻量级的?

虽然 Spring 提供了大量的功能,但它仍然被认为是轻量级的,原因如下:

  • 非侵入性: Spring 的设计尽量减少对外部框架的依赖,允许开发者仅使用所需的部分。
  • 易于集成:Spring 可以很容易地与现有的系统集成,而不需要重大的架构更改。
  • 可配置性:开发者可以通过 XML 或注解来配置 Spring,这样可以根据需要调整应用程序的行为。

Spring IoC与Aop怎么理解?

Spring IoC(Inversion of Control,控制反转)和 AOP(Aspect-Oriented Programming,面向切面编程)是 Spring 框架中的两个核心概念,它们分别解决了对象管理和跨切关注点的代码重用问题。下面我们分别解释这两个概念及其在 Spring 中的应用。

Spring IoC (Inversion of Control, 控制反转)

让我们用喝水的例子来更好地说明 IoC 的概念:

想象一下,在传统的编程模式中,如果你想喝一杯热水,你需要自己去找电水壶,然后加水,再插电加热,最后才能喝到热水。这个过程中,你主动控制了所有步骤,即你自己管理了“依赖”。

而在 IoC 的情景下,就像是你有一个智能家庭系统,当你告诉它你想喝热水时,它会为你准备好一切——找到电水壶、加水、加热,最后把准备好的热水送到你面前。在这个过程中,你不需要关心热水是如何准备的,你只需要关心最终的结果——热水。
控制反转是一种设计模式,其主要目的是减少对象之间的依赖关系。在 Spring 框架中,IoC 是通过依赖注入(Dependency Injection, DI)来实现的。

IoC 示例

首先,我们定义一个 WaterHeaterService 类,它依赖于 WaterHeaterRepository

java">public class WaterHeaterService {
    private WaterHeaterRepository waterHeaterRepository;

    public WaterHeaterService(WaterHeaterRepository waterHeaterRepository) {
        this.waterHeaterRepository = waterHeaterRepository;
    }

    public HotWater getHotWater() {
        return waterHeaterRepository.prepareHotWater();
    }
}

接着,我们定义 WaterHeaterRepository 接口及其实现:

java">public interface WaterHeaterRepository {
    HotWater prepareHotWater();
}

public class WaterHeaterRepositoryImpl implements WaterHeaterRepository {
    @Override
    public HotWater prepareHotWater() {
        // 假设这里是一个复杂的加热逻辑
        return new HotWater();
    }
}

public class HotWater {
    // HotWater 类的具体实现
}

在 Spring 框架中,我们将使用注解来定义和注入依赖:

java">@Service
public class WaterHeaterServiceImpl implements WaterHeaterService {
    private final WaterHeaterRepository waterHeaterRepository;

    @Autowired
    public WaterHeaterServiceImpl(WaterHeaterRepository waterHeaterRepository) {
        this.waterHeaterRepository = waterHeaterRepository;
    }

    public HotWater getHotWater() {
        return waterHeaterRepository.prepareHotWater();
    }
}

@Repository
public class WaterHeaterRepositoryImpl implements WaterHeaterRepository {
    @Override
    public HotWater prepareHotWater() {
        // 假设这里是一个复杂的加热逻辑
        return new HotWater();
    }
}

public class HotWater {
    // HotWater 类的具体实现
}

Spring AOP (Aspect-Oriented Programming, 面向切面编程)

面向切面编程是一种编程范式,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中分离出来。横切关注点是指那些跨越多个类的功能,如日志记录、事务管理、权限验证等。

AOP 示例

接下来,我们可以定义一个切面来记录加热前后的时间:

java">@Aspect
@Component
public class HeatingLogAspect {

    @Before("execution(* com.example.service.WaterHeaterServiceImpl.getHotWater())")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("Starting heating process: " + joinPoint.getSignature());
    }

    @After("execution(* com.example.service.WaterHeaterServiceImpl.getHotWater())")
    public void logAfter(JoinPoint joinPoint) {
        System.out.println("Heating process finished: " + joinPoint.getSignature());
    }
}

在这个例子中,HeatingLogAspect 类定义了两个通知,分别在加热过程开始和结束时记录日志。

Spring Boot 的快速构建

1.打开网址:https://start.spring.io/
在这里插入图片描述
如果您想要配置 Spring Boot 3.3 项目来使用正确的 JDK 版本,您需要:

确认 JDK 版本:确保您的开发环境中安装了 Java 17 或更高版本的 JDK。
IDEA 配置:如果您使用的是 IntelliJ IDEA,需要在项目设置中指定正确的 JDK 版本。
2.在这里插入图片描述
3.点击生成,导入idea
点击file -> Open->找到demo,导入。等待下载好依赖
在这里插入图片描述

个人建议还是用jdk1.8,等网上出了教程在看jdk17,springboot 3需要注意点有不少。

总结

  • IoC 通过依赖注入简化了对象间的依赖关系,使得 WaterHeaterService 不需要关心 WaterHeaterRepository 的创建和配置细节。
  • AOP 通过切面编程将加热过程的日志记录逻辑从业务逻辑中分离出来,提高了代码的可读性和可维护性。

打卡学习Spring boot 第一天。

AOP不是OOP的替代品,而是OOP的补充


http://www.niftyadmin.cn/n/5665735.html

相关文章

turbo码 交织器的类型

交织器在Turbo码编码过程中起着至关重要的作用,其类型可以根据不同的设计原则和实现方式进行分类。以下是一些常见的交织器类型及其特点: 一、按设计原则分类 确定性交织器: 确定性交织器遵循固定的映射规则,即输入数据的每个位…

重修设计模式-结构型-门面模式

重修设计模式-结构型-门面模式 门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用 门面模式(Facade Pattern),也称作外观模式,主要用于为复杂的子系统提供一个统一的、更简洁的接口,使得…

C++学习笔记----7、使用类与对象获得高性能(二)---- 理解对象生命周期(4)

7、拷贝构造函数 在C中有一种叫做拷贝构造函数的特殊的构造函数,它允许生成另一个对象的拷贝的对象。下面是在SpreadsheetCell类中的拷贝构造函数的声明: export class SpreadsheetCell { public:SpreadsheetCell(const SpreadsheetCell& src);// R…

【Java】多态性【主线学习笔记】

文章目录 前言多态性1、编译时多态性(静态多态性):2、运行时多态性(动态多态性)3、多态性的实用性4、多态性的优点与弊端 下一篇点击跳转《【Java】多态性-向下转型【主线学习笔记】》 前言 Java是一门功能强大且广泛应…

功能测试干了三年,快要废了。。。

8年前刚进入到IT行业,到现在学习软件测试的人越来越多,所以在这我想结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷,越来越多的转行和大学生进入测试行业,导致软件测试已经饱和了,想要获得更好的待…

JAVA与Python谁更适合后端?

Java和Python各有优势,选择哪种语言应根据项目的具体需求和团队的实际情况来决定。 小型团队或原型开发:如果项目规模小、需求变动频繁,或者需要快速开发产品原型,建议使用Python。大型项目或企业级应用:如果项目规模…

【毕设】基于Java的超市管理系统

基于Java的超市管理系统是一个用于管理超市日常运营的软件解决方案,它可以包括库存管理、销售管理、客户管理等多个模块。以下是一个简化的系统设计方案,以及一些关键组件和技术选型的建议。 系统架构 前端: HTML/CSS/JavaScript&#xf…

状态估计算法

目录 前言一、贝叶斯滤波二、卡尔曼滤波2.1 KF简介2.2 基本线性模型2.3 KF公式推导2.3.1 预测值2.3.2 先验误差协方差矩阵2.3.3 卡尔曼增益2.3.4 最优估计值2.3.5 后验误差协方差矩阵 2.4 KF算法使用2.5 MATLAB验证2.5 Python验证 三、扩展卡尔曼滤波3.1 EKF原理3.2 MATLAB实现…