Java后端学习系列(9):Spring Boot基础入门

Java后端学习系列(9):Spring Boot基础入门

前言

在前面我们已经对Spring框架有了较为深入的了解,掌握了其核心的IoC、AOP等功能以及如何搭建简单的Spring应用。而Spring Boot作为Spring框架的进一步升华,它旨在简化Spring应用的初始搭建以及开发过程,让开发者能够更加专注于业务逻辑的实现,快速地开发出高效、可独立运行的微服务和Web应用等。本期我们就一同踏入Spring Boot基础入门的学习之旅,继续拓展我们的Java后端开发技能。本系列共15期,持续为大家呈现关键且实用的知识内容。

一、Spring Boot的基本概念与优势

1.1 基本概念

Spring Boot是一个基于Spring框架的快速开发框架,它采用了“约定优于配置”的理念,通过提供一系列的默认配置以及自动配置机制,极大地减少了开发人员在搭建和配置Spring项目时所需要花费的时间和精力。在Spring Boot中,很多常见的功能和组件都已经预先配置好,开发者只需按照约定的方式进行简单的配置或者直接使用,就能快速启动并运行一个Spring应用,并且可以方便地将其打包成可独立部署的应用程序,如可执行的JAR文件等。

1.2 优势

  • 简化配置:摒弃了传统Spring项目中繁杂的XML配置文件,大量使用默认配置和注解来完成配置工作。例如,对于Web开发,只需添加相关的起步依赖(Starter Dependency),Spring Boot就能自动配置好内置的Web服务器(如Tomcat、Jetty等),无需开发者手动去配置服务器相关参数。
  • 快速启动项目:借助其提供的项目模板和命令行工具(如Spring Initializr),能够在短短几分钟内搭建起一个基本的Spring项目框架,包含了常用的依赖和默认配置,开发者可以立即开始编写业务逻辑代码,大大提高了项目的启动速度。
  • 自动配置:根据项目中引入的依赖,Spring Boot能够自动推断并配置相应的组件和功能。比如引入了数据库相关依赖,它会自动配置好数据库连接池、数据源等,开发者只需关注具体的业务数据操作即可,降低了对Spring框架底层配置细节的依赖,提高了开发效率。
  • 方便的依赖管理:通过起步依赖(Starter Dependency)机制,将一组相关的依赖整合在一起,方便开发者添加和管理项目所需的各种功能模块的依赖。例如,要开发一个Web应用,引入spring-boot-starter-web依赖,就会自动包含了Spring Web、Servlet、Tomcat等相关的依赖,避免了开发者逐个去查找和添加这些依赖的麻烦。
  • 易于部署:可以将Spring Boot应用打包成一个独立的可执行JAR文件,这个文件内置了运行应用所需的一切,包括依赖的类库、配置文件以及嵌入式的服务器等,使得在不同环境(如开发环境、测试环境、生产环境)中的部署变得非常简单,只需运行这个JAR文件即可启动应用。

二、快速搭建Spring Boot项目

2.1 使用Spring Initializr(在线方式)

  1. 访问Spring Initializr的官方网站(https://start.spring.io/)。
  2. 在网页上填写项目的基本信息,如项目的名称、描述、包名、选择开发语言(一般为Java)、项目构建工具(可以是Maven或Gradle)等。
  3. 选择项目所需的依赖,例如,如果要开发一个Web应用,勾选spring-boot-starter-web;如果要连接数据库,可根据具体使用的数据库勾选对应的数据库驱动依赖(如mysql-connector-java等)以及Spring Data相关的依赖等。
  4. 点击“Generate”按钮,网站会生成一个包含所选依赖和基本配置的项目压缩包,下载并解压到本地开发环境中。
  5. 使用IDE(如IntelliJ IDEA、Eclipse等)打开解压后的项目,就可以看到已经搭建好的Spring Boot项目基本结构,里面包含了src/main/java(存放Java源文件)、src/main/resources(存放配置文件等)等目录,并且项目的初始配置和依赖都已经添加好,开发者可以直接在src/main/java目录下创建自己的包和类,开始编写业务逻辑代码了。

2.2 使用IDE自带的Spring Boot项目创建功能(以IntelliJ IDEA为例)

  1. 打开IntelliJ IDEA,点击“File” -> “New” -> “Project”。
  2. 在弹出的项目创建窗口中,选择“Spring Initializr”选项,然后选择项目的SDK(一般是已安装的Java开发工具包版本)。
  3. 填写项目的相关信息,如项目名称、项目位置、包名等,和在线方式类似,接着选择构建工具(Maven或Gradle)。
  4. 在“Dependencies”页面,勾选所需的依赖,比如添加spring-boot-starter-web用于Web开发等。
  5. 点击“Next”并按照提示完成项目创建,IDE会自动下载相关依赖并构建好项目的基本结构,同样可以直接在生成的项目中开展业务代码编写工作了。

三、Spring Boot的自动配置原理

3.1 自动配置的基础

Spring Boot的自动配置是基于Spring框架的条件化配置(Conditional Configuration)机制实现的。它会在项目启动时,根据类路径下存在的依赖以及一些预设的条件,自动决定是否要对某个组件进行配置以及如何配置。例如,如果类路径下存在spring-boot-starter-web依赖,Spring Boot会检测到这一情况,然后自动配置相关的Web组件,像Web服务器、Spring MVC相关的配置等,以满足Web应用开发的基本需求。

3.2 关键注解与类

  • @SpringBootApplication:这是Spring Boot项目的核心注解,它是一个组合注解,实际上包含了@Configuration(表明这是一个配置类,用于替代传统的XML配置文件)、@EnableAutoConfiguration(开启自动配置功能)和@ComponentScan(用于扫描项目中的组件,如使用@Component@Service等注解标记的类)等注解的功能。当我们在项目的主启动类上添加了@SpringBootApplication注解后,就相当于告诉Spring Boot按照约定的规则来进行项目的配置和组件扫描等工作。
  • AutoConfiguration类:在Spring Boot的自动配置过程中,有很多AutoConfiguration开头的类发挥着关键作用。例如,WebMvcAutoConfiguration类负责对Spring MVC进行自动配置,它会根据项目中的具体情况(如是否有自定义的Web配置等),通过条件化配置的方式来决定如何配置Spring MVC的相关组件,像视图解析器、请求映射处理器等,确保Web应用能够正常运行。这些自动配置类通常会使用各种条件注解(如@ConditionalOnClass@ConditionalOnMissingBean等)来判断是否满足配置的条件。

3.3 自定义自动配置

开发者也可以根据自己的需求进行自定义自动配置。比如,假设我们有一个自定义的组件,希望在满足一定条件下由Spring Boot自动进行配置,可以按照以下步骤进行:

  1. 创建一个配置类,使用@Configuration注解标记它,例如:
@Configuration
public class MyCustomAutoConfiguration {
    // 在这里进行组件的配置逻辑,比如创建Bean并注入依赖等
}
  1. 使用条件注解来指定配置生效的条件,例如,如果希望只有当某个特定的类存在于类路径下时才进行配置,可以使用@ConditionalOnClass注解:
@Configuration
@ConditionalOnClass(MySpecialClass.class)
public class MyCustomAutoConfiguration {
    // 配置逻辑
}
  1. 将自定义的自动配置类放置在合适的位置,让Spring Boot能够扫描到它,一般可以将其放在项目的src/main/java目录下,并且可以通过在resources/META-INF/spring.factories文件中添加配置信息,告诉Spring Boot要加载这个自定义的自动配置类,例如:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyCustomAutoConfiguration

通过这样的方式,就能实现自定义的自动配置,使其融入到Spring Boot的整体自动配置体系中。

四、简单的Spring Boot应用示例展示

下面我们来创建一个简单的Spring Boot Web应用示例,实现一个简单的RESTful API接口,用于获取和添加图书信息:

  1. 创建图书实体类
public class Book {
    private Long id;
    private String title;
    private String author;

    // 构造函数、Getter和Setter方法省略

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", title='" + title +
                ", author='" + author +
                '}';
    }
}
  1. 创建数据访问层(Repository)接口(这里简单使用内存集合模拟数据库操作,实际可替换为真实数据库操作)
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;

@Repository
public interface BookRepository {
    List<Book> findAll();
    Book save(Book book);
}

@Repository
public class BookRepositoryImpl implements BookRepository {
    private List<Book> bookList = new ArrayList<>();

    @Override
    public List<Book> findAll() {
        return bookList;
    }

    @Override
    public Book save(Book book) {
        bookList.add(book);
        return book;
    }
}
  1. 创建业务逻辑层(Service)接口和实现类,调用数据访问层方法
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BookService {
    @Autowired
    private BookRepository bookRepository;

    public List<Book> findAllBooks() {
        return bookRepository.findAll();
    }

    public Book addBook(Book book) {
        return bookRepository.save(book);
    }
}
  1. 创建Web层(Controller),定义RESTful API接口
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/books")
public class BookController {
    @Autowired
    private BookService bookService;

    @GetMapping
    public ResponseEntity<List<Book>> getBooks() {
        List<Book> books = bookService.findAllBooks();
        return new ResponseEntity<>(books, HttpStatus.OK);
    }

    @PostMapping
    public ResponseEntity<Book> addBook(@RequestBody Book book) {
        Book savedBook = bookService.addBook(book);
        return new ResponseEntity<>(savedBook, HttpStatus.CREATED);
    }
}
  1. 启动类(使用@SpringBootApplication注解)
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BookAppApplication {
    public static void main(String[] args) {
        SpringApplication.run(BookAppApplication.class, args);
    }
}

通过以上代码,我们搭建了一个简单的Spring Boot应用,启动这个应用后(可以直接运行main方法),就能通过访问对应的API接口(如http://localhost:8080/books使用GET方法获取图书列表,使用POST方法添加图书信息等)来进行交互了,展示了Spring Boot在快速开发Web应用方面的便捷性。

五、下一步学习建议

  1. 项目拓展:基于上述示例,进一步扩展应用的功能,比如添加图书的删除、修改功能,实现更复杂的查询逻辑等,深入体会Spring Boot在实际项目开发中的应用以及如何进行功能的迭代和完善。
  2. 深入探究配置:深入学习Spring Boot的各种配置方式,包括配置文件(如application.propertiesapplication.yml)的使用,了解如何通过配置来调整应用的各种参数,如服务器端口、数据库连接等,以及如何覆盖默认的自动配置,让应用更贴合实际需求。
  3. 集成其他技术:探索如何将Spring Boot与其他常用的后端技术进行集成,比如与数据库(如MySQL、Oracle等)进行更深入的连接和操作,与消息队列(如RabbitMQ、Kafka等)进行消息传递的整合,拓宽应用的功能和适用场景。

下期预告

《Java后端学习系列(10):Spring Cloud基础入门》

  • Spring Cloud的基本概念与作用
  • 常用的Spring Cloud组件介绍(如Eureka、Ribbon、Feign等)
  • 构建简单的Spring Cloud微服务架构示例
  • Spring Cloud微服务之间的通信与协作机制

Spring Boot为我们的Java后端开发带来了极大的便利,希望大家通过不断实践和学习,熟练掌握它的使用方法,快速开发出高质量的应用程序。如果在学习过程中有任何疑问或者心得,欢迎在评论区分享交流,我们下期再见。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值