Spring boot从0到1 - day01
前言–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 IoCInversion of Control控制反转和 AOPAspect-Oriented Programming面向切面编程是 Spring 框架中的两个核心概念它们分别解决了对象管理和跨切关注点的代码重用问题。下面我们分别解释这两个概念及其在 Spring 中的应用。#### Spring IoC (Inversion of Control, 控制反转)让我们用喝水的例子来更好地说明 IoC 的概念想象一下在传统的编程模式中如果你想喝一杯热水你需要自己去找电水壶然后加水再插电加热最后才能喝到热水。这个过程中你主动控制了所有步骤即你自己管理了“依赖”。而在 IoC 的情景下就像是你有一个智能家庭系统当你告诉它你想喝热水时它会为你准备好一切——找到电水壶、加水、加热最后把准备好的热水送到你面前。在这个过程中你不需要关心热水是如何准备的你只需要关心最终的结果——热水。 控制反转是一种设计模式其主要目的是减少对象之间的依赖关系。在 Spring 框架中IoC 是通过依赖注入Dependency Injection, DI来实现的。##### IoC 示例首先我们定义一个WaterHeaterService类它依赖于WaterHeaterRepository public class WaterHeaterService { private WaterHeaterRepository waterHeaterRepository; public WaterHeaterService(WaterHeaterRepository waterHeaterRepository) { this.waterHeaterRepository waterHeaterRepository; } public HotWater getHotWater() { return waterHeaterRepository.prepareHotWater(); } } 接着我们定义WaterHeaterRepository接口及其实现 public interface WaterHeaterRepository { HotWater prepareHotWater(); } public class WaterHeaterRepositoryImpl implements WaterHeaterRepository { Override public HotWater prepareHotWater() { // 假设这里是一个复杂的加热逻辑 return new HotWater(); } } public class HotWater { // HotWater 类的具体实现 } 在 Spring 框架中我们将使用注解来定义和注入依赖 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 示例接下来我们可以定义一个切面来记录加热前后的时间 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等网上出了教程在看jdk17springboot 3需要注意点有不少。#### 总结*IoC通过依赖注入简化了对象间的依赖关系使得WaterHeaterService不需要关心WaterHeaterRepository的创建和配置细节。*AOP通过切面编程将加热过程的日志记录逻辑从业务逻辑中分离出来提高了代码的可读性和可维护性。打卡学习Spring boot 第一天。AOP不是OOP的替代品而是OOP的补充