springboot_01

00 -- 导学

内容

  • 为什么学 SpringBoot3 + Vue3?
  • 后端:SpringBoot3 是当前企业后端开发主流框架。

  • 前端:Vue3 是企业招聘要求最普遍的前端技术。

  • 学完具备独立开发后台管理系统能力。

工具链

  • JDK 17+

  • IDEA

  • Node.js

  • Maven/Gradle

技巧

  • 配置好环境变量。

  • IDEA 中设置 Maven 阿里云镜像,下载依赖快。

01 -- SpringBoot 概述

核心思想

  • 自动配置(AutoConfiguration)

  • 起步依赖(Starter)

  • 内嵌服务器(Tomcat/Jetty)

常用 Starter

  • spring-boot-starter-web

  • spring-boot-starter-data-jpa

  • spring-boot-starter-test

小坑

  • 不要和老版 Spring MVC XML 混用。

  • 多个配置文件时,application.yml 优先。

02 -- SpringBoot 入门示例

关键注解

  • @SpringBootApplication

等同于:

```java

@Configuration

@EnableAutoConfiguration

@ComponentScan

```

入口类示例

java 复制代码
@SpringBootApplication

public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);

    }

}

小坑

  • 启动类要放在根包,否则组件无法扫描到。

03 -- 工程创建

推荐目录结构

复制代码
src/main/java

 ├── com.xxx.demo

 |     ├── controller

 |     ├── service

 |     ├── mapper

 |     ├── entity

 |     ├── config

 |     ├── DemoApplication.java

src/main/resources

 ├── application.yml

 ├── mapper/*.xml

技巧

  • spring-boot-starter-parent 管理依赖版本。

  • IDEA 设置 Maven 自动导入。

04 -- 配置文件基本使用

优先级

命令行参数 > 环境变量 > application.yml > application.properties

示例

yaml 复制代码
server:

  port: 8081

spring:

  datasource:

    url: jdbc:mysql://localhost:3306/test

    username: root

    password: 123456

小坑

  • 端口冲突要修改 server.port

  • .yml 更适合层级结构,推荐用它。

05 -- YAML 配置与读取

YAML 语法

yaml 复制代码
person:

  name: Tom

  age: 20

  hobbies:

    - code

    - music

读取配置

  • 单个值:

```java

@Value("${person.name}")

```

  • 批量值:

```java

@Component

@ConfigurationProperties(prefix = "person")

public class Person {

private String name;

private int age;

private List hobbies;

}

```

小坑

  • @ConfigurationProperties 需要 @Component@EnableConfigurationProperties

  • 批量读取不要用 @Value

06 -- 整合 MyBatis

依赖

xml 复制代码
<dependency>

    <groupId>org.mybatis.spring.boot</groupId>

    <artifactId>mybatis-spring-boot-starter</artifactId>

</dependency>

Mapper

java 复制代码
@Mapper

public interface UserMapper {

    User selectById(Long id);

}

小坑

  • Mapper 必须有 @Mapper 或配置 @MapperScan

  • XML 文件要放对位置。

  • 分页推荐用 MyBatis-Plus。

07 -- Bean 扫描机制

注解

  • @Component:泛用组件

  • @Service:业务逻辑层

  • @Repository:数据访问层

  • @Controller:控制层

  • @RestController@Controller + @ResponseBody

小坑

  • 如果包结构复杂,记得配 @ComponentScan(basePackages = "...")

08 -- Bean 注册方式

三种方式

  1. @Component / @Service / @Controller

  2. 配置类 + @Bean

```java

@Configuration

public class AppConfig {

@Bean

public UserService userService() {

return new UserService();

}

}

```

  1. 条件注册:@Conditional 系列

小坑

  • @Bean 方法名就是 Bean 名。

  • 不同注册方式注意优先级。

09 -- 条件注册

常见条件注解

  • @ConditionalOnBean

  • @ConditionalOnMissingBean

  • @ConditionalOnProperty

小坑

  • 条件不满足就不注册,要注意 NPE 风险。

  • Starter 的自动装配大量用到条件注册。

10 -- 自动配置原理

核心

  • @EnableAutoConfiguration

  • META-INF/spring.factories

原理

  • 启动时加载所有 spring.factories 中配置,自动装配需要的 Bean。

小坑

  • 不满足条件就不会装配。

  • 可以开启 debug=true 查看自动配置情况。

11 -- 自定义 Starter

结构

  • core:功能实现

  • autoconfigure:自动装配

自动装配类示例

java 复制代码
@Configuration

@ConditionalOnProperty(name = "my.feature.enabled", havingValue = "true")

public class MyAutoConfig {

    @Bean

    public MyBean myBean() {

        return new MyBean();

    }

}

声明

properties 复制代码
# resources/META-INF/spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

com.xxx.demo.autoconfig.MyAutoConfig

小坑

  • Starter 不要引入 spring-boot-starter-web

  • 自动装配类命名要唯一。

相关推荐
会编程的吕洞宾1 分钟前
DeepAgents In Action学习(Second)
android·java·学习
梦梦代码精14 分钟前
基于UniApp+Vue3+ThinkPHP 8,这套知识付费系统的架构设计有点东西
java·低代码·docker·uni-app·开源·php
雨落倾城夏未凉23 分钟前
halcon核心-C# 联合编程(十一)
后端
-凌凌漆-27 分钟前
【freertos】Task创建(v2)
java·开发语言·算法
牛油果子哥q34 分钟前
C++内存模型与深浅拷贝万字详解:栈堆静态内存布局、深浅拷贝底层差异、内存泄漏根治、拷贝崩溃踩坑、手写深拷贝实战
java·开发语言·c++
元界metalite1 小时前
SpringBoot整合Druid-连接池参数为什么不能照抄
后端
fatcoder1 小时前
玩转Nginx 09 — 运维排障:三场"火灾"实战演练
前端·后端·nginx
元界metalite1 小时前
MyBatis通用查询如何避免SELECT *?MetaLite如何按需返回字段
后端
Flynt2 小时前
Go 1.27 升了一波,泛型方法和 JSON v2 真香但有个坑
后端·go
我会冲击波2 小时前
vibe coding 一个多月,我把 Claude Code + Pi 做成了桌面 IDE,还给它移植了 VS Code 的编辑体验
前端·javascript·后端