Spring 框架(IoC、AOP、Spring Boot) 的必会知识点汇总

目录:

  • [🧠 一、Spring 框架概述](#🧠 一、Spring 框架概述)
    • [1. Spring 的核心功能](#1. Spring 的核心功能)
    • [2. Spring 模块化结构](#2. Spring 模块化结构)
  • [🧩 二、IoC(控制反转)核心知识点](#🧩 二、IoC(控制反转)核心知识点)
    • [1. IoC 的核心思想](#1. IoC 的核心思想)
    • [2. Bean 的定义与管理](#2. Bean 的定义与管理)
    • [3. IoC 容器的核心接口](#3. IoC 容器的核心接口)
    • [4. Spring Bean 的创建方式](#4. Spring Bean 的创建方式)
  • [🧱 三、AOP(面向切面编程)核心知识点](#🧱 三、AOP(面向切面编程)核心知识点)
    • [1. AOP 的核心概念](#1. AOP 的核心概念)
    • [2. AOP 的通知类型](#2. AOP 的通知类型)
    • [3. AOP 的实现原理](#3. AOP 的实现原理)
    • [4. AOP 的使用场景](#4. AOP 的使用场景)
    • [5. AOP 示例代码](#5. AOP 示例代码)
  • [📌 四、Spring Boot 核心知识点](#📌 四、Spring Boot 核心知识点)
    • [1. Spring Boot 的核心特性](#1. Spring Boot 的核心特性)
    • [2. Spring Boot 的启动流程](#2. Spring Boot 的启动流程)
    • [3. Spring Boot 核心注解](#3. Spring Boot 核心注解)
    • [4. Spring Boot 自动配置原理](#4. Spring Boot 自动配置原理)
    • [5. Spring Boot 的配置文件](#5. Spring Boot 的配置文件)
    • [6. Spring Boot Actuator 监控](#6. Spring Boot Actuator 监控)
  • [🧪 四、Spring Boot 核心功能与实践](#🧪 四、Spring Boot 核心功能与实践)
    • [1. Spring Boot 整合 MyBatis](#1. Spring Boot 整合 MyBatis)
    • [2. Spring Boot 整合 Spring MVC](#2. Spring Boot 整合 Spring MVC)
    • [3. Spring Boot 整合 Spring Security](#3. Spring Boot 整合 Spring Security)
  • [🧩 五、Spring Boot 常见面试题及答案](#🧩 五、Spring Boot 常见面试题及答案)
    • [1. Spring 和 Spring Boot 的区别?](#1. Spring 和 Spring Boot 的区别?)
    • [2. 什么是 Spring Boot 的 Starter 依赖?](#2. 什么是 Spring Boot 的 Starter 依赖?)
    • [3. Spring Boot 的自动配置原理?](#3. Spring Boot 的自动配置原理?)
    • [4. Spring Boot 中的 @SpringBootApplication 注解作用?](#4. Spring Boot 中的 @SpringBootApplication 注解作用?)
    • [5. Spring Boot 如何自定义自动配置?](#5. Spring Boot 如何自定义自动配置?)
    • [6. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?](#6. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?)
    • [7. Spring Boot 如何启用 Actuator 监控?](#7. Spring Boot 如何启用 Actuator 监控?)
  • [📋 六、Spring 核心知识点总结](#📋 六、Spring 核心知识点总结)
  • [📄 七、完整代码示例(Spring Boot + AOP + IoC)](#📄 七、完整代码示例(Spring Boot + AOP + IoC))
    • [1. 定义 Bean](#1. 定义 Bean)
    • [2. AOP 日志记录](#2. AOP 日志记录)
    • [3. Spring Boot 启动类](#3. Spring Boot 启动类)
  • [📚 八、推荐学习资料](#📚 八、推荐学习资料)
  • [✅ 九、完整总结(Spring 核心功能)](#✅ 九、完整总结(Spring 核心功能))
  • [📄 十、完整 Spring Boot 面试高频题](#📄 十、完整 Spring Boot 面试高频题)
    • [1. Spring Boot 如何实现自动配置?](#1. Spring Boot 如何实现自动配置?)
    • [2. Spring Boot 的 Starter 依赖是什么?](#2. Spring Boot 的 Starter 依赖是什么?)
    • [3. Spring Boot 如何启用 Actuator 监控?](#3. Spring Boot 如何启用 Actuator 监控?)
    • [4. Spring Boot 如何自定义自动配置?](#4. Spring Boot 如何自定义自动配置?)
    • [5. Spring Boot 的启动流程?](#5. Spring Boot 的启动流程?)
    • [6. Spring Boot 如何启用懒加载?](#6. Spring Boot 如何启用懒加载?)
    • [7. Spring Boot 如何集成 MyBatis?](#7. Spring Boot 如何集成 MyBatis?)
    • [8. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?](#8. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?)
  • [📌 十一、Spring Boot 常用配置参数(application.yml)](#📌 十一、Spring Boot 常用配置参数(application.yml))
  • [🧪 十二、Spring Boot 实战建议](#🧪 十二、Spring Boot 实战建议)
  • [📎 十三、完整 Spring Boot 项目结构示例](#📎 十三、完整 Spring Boot 项目结构示例)
  • [📄 十四、Spring Boot 常见问题定位工具](#📄 十四、Spring Boot 常见问题定位工具)
  • [📌 十五、Spring Boot 常用命令行参数](#📌 十五、Spring Boot 常用命令行参数)
  • [📚 十六、推荐学习资料](#📚 十六、推荐学习资料)
  • [✅ 十七、总结:Spring 开发必会知识点](#✅ 十七、总结:Spring 开发必会知识点)

🧠 一、Spring 框架概述

1. Spring 的核心功能

  • IoC(控制反转):将对象的创建和依赖管理交给 Spring 容器。
  • AOP(面向切面编程):解耦核心业务逻辑与非业务逻辑(如日志、事务)。
  • Spring Boot:基于 Spring 的快速开发框架,提供自动配置和内嵌服务器。

2. Spring 模块化结构

Spring 框架由多个模块组成,核心模块包括:

  • Spring Core:IoC 和 Bean 管理。
  • Spring Context:上下文支持(如 ApplicationContext)。
  • Spring AOP:AOP 支持。
  • Spring Data Access:JDBC、ORM 框架集成。
  • Spring Web:Web 开发支持(如 Spring MVC)。

🧩 二、IoC(控制反转)核心知识点

1. IoC 的核心思想

  • 传统方式:对象由程序主动创建(如 new User())。
  • IoC 方式:对象由 Spring 容器创建并管理,程序只需声明依赖关系。

2. Bean 的定义与管理

  • Bean 的作用域:
作用域 说明
singleton 默认作用域,容器中只有一个实例(单例)
prototype 每次请求都创建新实例
request Web 应用中,每个 HTTP 请求一个实例
session Web 应用中,每个 HTTP 会话一个实例
  • Bean 的生命周期:

    创建 Bean → 依赖注入 → 初始化(@PostConstruct / init-method) → 使用 Bean → 销毁(@PreDestroy / destroy-method)

  • Bean 的注入方式

    • 构造器注入:
      @Service
      public class UserService {
      private final UserRepository userRepo;

      public UserService(UserRepository userRepo) {
      this.userRepo = userRepo;
      }
      }

    • Setter 注入:
      @Service
      public class UserService {
      private UserRepository userRepo;

      @Autowired
      public void setUserRepository(UserRepository userRepo) {
      this.userRepo = userRepo;
      }
      }

    • 字段注入(不推荐):
      @Service
      public class UserService {
      @Autowired
      private UserRepository userRepo;
      }

3. IoC 容器的核心接口

  • BeanFactory:基础容器接口,支持懒加载。
  • ApplicationContext:扩展 BeanFactory,提供更多企业级功能(如 AOP、国际化、事件机制)。

4. Spring Bean 的创建方式

  • XML 配置:

    <bean id="userService" class="com.example.UserService"> <property name="userRepo" ref="userRepository"/> </bean>
  • 注解方式:

    @Component // 组件扫描
    public class UserService { ... }

    @Service // 业务层注解
    public class UserService { ... }

    @Repository // 数据层注解
    public class UserRepository { ... }

  • Java 配置类:

    @Configuration
    public class AppConfig {
    @Bean
    public UserService userService() {
    return new UserService(userRepository());
    }

    复制代码
      @Bean
      public UserRepository userRepository() {
          return new UserRepository();
      }

    }

🧱 三、AOP(面向切面编程)核心知识点

1. AOP 的核心概念

  • 切面(Aspect):横切关注点的模块化(如日志、权限)。
  • 切点(Pointcut):定义哪些方法需要增强(如所有 @GetMapping 方法)。
  • 通知(Advice):在切点前后执行的逻辑(如方法执行前后记录日志)。
  • 连接点(Join Point):程序执行过程中的某个点(如方法调用)。
  • 织入(Weaving):将切面逻辑插入到目标对象的过程。

2. AOP 的通知类型

通知类型 注解 说明
前置通知(Before) @Before 方法执行前执行
后置通知(After) @After 方法执行后执行(无论是否异常)
返回通知(AfterReturning) @AfterReturning 方法正常返回后执行
异常通知(AfterThrowing) @AfterThrowing 方法抛出异常时执行
后置通知(After) @Around 方法执行前后都可以执行(最灵活)

3. AOP 的实现原理

  • JDK 动态代理:基于接口的代理(java.lang.reflect.Proxy)。
  • CGLIB 代理:基于子类继承的代理(适用于无接口的类)。

4. AOP 的使用场景

日志记录 :记录方法调用日志。
权限控制 :验证用户是否有权限执行某个操作。
事务管理 :在方法执行前后开启/提交事务。
缓存处理:缓存方法结果,避免重复计算。

5. AOP 示例代码

复制代码
@Aspect
@Component
public class LoggingAspect {

    // 定义切点:所有 controller 包下的方法
    @Pointcut("execution(* com.example.controller.*.*(..))")
    public void controllerMethods() { }

    // 前置通知
    @Before("controllerMethods()")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("方法执行前: " + joinPoint.getSignature().getName());
    }

    // 环绕通知
    @Around("controllerMethods()")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        Object result = joinPoint.proceed(); // 执行目标方法
        long duration = System.currentTimeMillis() - start;
        System.out.println("方法执行耗时: " + duration + "ms");
        return result;
    }
}

📌 四、Spring Boot 核心知识点

1. Spring Boot 的核心特性

特性 说明
自动配置 根据类路径自动配置 Bean(如 DataSource、WebMvcConfigurer)
Starter 依赖 提供开箱即用的依赖组合(如 spring-boot-starter-web)
内嵌服务器 默认内嵌 Tomcat、Jetty 等服务器,无需外部部署
Actuator 监控 提供健康检查、指标监控等端点(如 /actuator/health)
配置集中管理 使用 application.properties 或 application.yml 统一管理配置

2. Spring Boot 的启动流程

  1. 启动类:使用 @SpringBootApplication 注解。

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

  2. 自动配置:Spring Boot 根据类路径自动加载配置(如 DataSourceAutoConfiguration)。

  3. 内嵌服务器启动:默认启动内嵌 Tomcat(可替换为 Jetty 或 Undertow)。

3. Spring Boot 核心注解

注解 说明
@SpringBootApplication 组合注解(@ComponentScan + @EnableAutoConfiguration)
@Component 通用组件扫描
@Service 业务层注解
@Repository 数据层注解
@RestController 组合注解(@Controller + @ResponseBody)
@Configuration 配置类注解
@Bean 在配置类中定义 Bean
@EnableAutoConfiguration 启用自动配置

4. Spring Boot 自动配置原理

  • 自动配置类:Spring Boot 提供的 spring-boot-autoconfigure 模块中定义了自动配置类(如 DataSourceAutoConfiguration)。
  • 条件注解:使用 @ConditionalOnClass、@ConditionalOnMissingBean 等条件注解,按需加载 Bean。
  • 配置文件:通过 application.yml 或 application.properties 覆盖默认配置。

5. Spring Boot 的配置文件

  • application.properties

    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
    spring.datasource.username=root
    spring.datasource.password=123456

  • application.yml:

    spring:
    datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 123456

6. Spring Boot Actuator 监控

  • 常用端点
端点 功能
/actuator/health 健康检查
/actuator/metrics 系统指标
/actuator/configprops 配置属性
/actuator/mappings 请求映射信息
/actuator/shutdown 关闭应用(需启用 management.endpoint.shutdown.enabled=true)

🧪 四、Spring Boot 核心功能与实践

1. Spring Boot 整合 MyBatis

  • 依赖:

    <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency>
  • 配置:

    mybatis:
    mapper-locations: classpath:mapper/*.xml
    type-aliases-package: com.example.model

  • 代码示例:

    @Repository
    public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(Long id);
    }

2. Spring Boot 整合 Spring MVC

  • 控制器示例:

    @RestController
    public class UserController {
    @Autowired
    private UserService userService;

    复制代码
      @GetMapping("/users/{id}")
      public User getUser(@PathVariable Long id) {
          return userService.getUserById(id);
      }

    }

3. Spring Boot 整合 Spring Security

  • 依赖

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
  • 配置类:

    @Configuration
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http
    .authorizeRequests()
    .antMatchers("/public/**").permitAll()
    .anyRequest().authenticated()
    .and()
    .formLogin();
    }
    }

🧩 五、Spring Boot 常见面试题及答案

1. Spring 和 Spring Boot 的区别?

  • Spring
    是基础框架,支持 IoC 和 AOP,需手动配置。
    适用于传统企业级应用(如 XML 配置)。
  • Spring Boot
    基于 Spring 的快速开发框架,提供自动配置和内嵌服务器。
    适用于微服务、快速原型开发。

2. 什么是 Spring Boot 的 Starter 依赖?

  • Starter 依赖:Spring Boot 提供的预配置依赖包,简化依赖管理和配置。

  • 示例

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency>

3. Spring Boot 的自动配置原理?

  • 自动配置类:Spring Boot 提供的 spring-boot-autoconfigure 模块中包含自动配置类。
  • 条件注解:通过 @ConditionalOnClass、@ConditionalOnMissingBean 等注解,按需加载 Bean。
  • 配置文件:通过 application.yml 或 application.properties 覆盖默认配置。

4. Spring Boot 中的 @SpringBootApplication 注解作用?

作用 :组合注解,包含:

@ComponentScan:自动扫描 Bean。

@EnableAutoConfiguration:启用自动配置。

@Configuration:声明配置类。

5. Spring Boot 如何自定义自动配置?

步骤

  1. 创建自定义配置类。
  2. 使用 @ConditionalOnClass、@ConditionalOnMissingBean 等条件注解。
  3. 将配置类打包为 spring.factories 文件(位于 META-INF 目录)。

示例

复制代码
@Configuration
@ConditionalOnClass(UserService.class)
public class MyAutoConfiguration {
    @Bean
    public UserService userService() {
        return new UserService();
    }
}
# META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration

6. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?

注解 说明

@ConditionalOnClass 指定类存在时加载配置

@ConditionalOnMissingClass 指定类不存在时加载配置

@ConditionalOnBean 指定 Bean 存在时加载配置

@ConditionalOnMissingBean 指定 Bean 不存在时加载配置

@ConditionalOnProperty 配置文件中指定属性存在时加载配置

7. Spring Boot 如何启用 Actuator 监控?

依赖:

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

配置:

复制代码
management:
  endpoints:
    web:
      exposure:
        include: "*"

访问端点:

http://localhost:8080/actuator/health

http://localhost:8080/actuator/metrics

📋 六、Spring 核心知识点总结

📄 七、完整代码示例(Spring Boot + AOP + IoC)

1. 定义 Bean

复制代码
@Service
public class UserService {
    public void doSomething() {
        System.out.println("UserService.doSomething");
    }
}

@Repository
public class UserRepository {
    public void save() {
        System.out.println("UserRepository.save");
    }
}

2. AOP 日志记录

复制代码
@Aspect
@Component
public class LoggingAspect {

    @Pointcut("execution(* com.example.service.*.*(..))")
    public void serviceMethods() { }

    @Before("serviceMethods()")
    public void logBefore(JoinPoint joinPoint) {
        System.out.println("方法执行前: " + joinPoint.getSignature().getName());
    }

    @After("serviceMethods()")
    public void logAfter(JoinPoint joinPoint) {
        System.out.println("方法执行后: " + joinPoint.getSignature().getName());
    }
}

3. Spring Boot 启动类

@SpringBootApplication

复制代码
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

📚 八、推荐学习资料

✅ 九、完整总结(Spring 核心功能)

  • Spring 核心思想
    • IoC:将对象的创建交给容器管理
    • AOP:将非业务逻辑解耦
  • Spring Boot 核心优势
    • 自动配置:减少手动配置
    • 内嵌服务器:无需外部部署
    • Actuator 监控:提供运行时指标

📄 十、完整 Spring Boot 面试高频题

1. Spring Boot 如何实现自动配置?

答案

  • 通过 spring-boot-autoconfigure 模块中的自动配置类。
  • 使用 @ConditionalOnXXX 注解按条件加载 Bean。
  • 通过 application.yml 或 application.properties 覆盖默认配置。

2. Spring Boot 的 Starter 依赖是什么?

答案

  • 提供开箱即用的依赖组合(如 spring-boot-starter-web)。
  • 自动配置 Bean(如 DataSource、Jackson)。

3. Spring Boot 如何启用 Actuator 监控?

答案

  • 添加 spring-boot-starter-actuator 依赖。
  • 配置 management.endpoints.web.exposure.include=*。
  • 访问端点(如 /actuator/health)。

4. Spring Boot 如何自定义自动配置?

答案

  • 创建自定义配置类。
  • 使用 @ConditionalOnXXX 注解按条件加载。
  • 打包为 spring.factories 文件,供 Spring Boot 自动加载。

5. Spring Boot 的启动流程?

答案

  • 执行 SpringApplication.run()。
  • 加载自动配置类(@EnableAutoConfiguration)。
  • 启动内嵌服务器(Tomcat、Jetty)。
  • 执行 @PostConstruct 和 CommandLineRunner。

6. Spring Boot 如何启用懒加载?

答案

  • 配置 spring.main.lazy-initialization=true。
  • 仅在需要时创建 Bean,提升启动速度。

7. Spring Boot 如何集成 MyBatis?

答案

  • 添加 mybatis-spring-boot-starter 依赖。
  • 配置数据源(application.yml)。
  • 定义 Mapper 接口和 XML 映射文件。

8. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?

答案

  • @ConditionalOnClass:类存在时加载。
  • @ConditionalOnMissingBean:Bean 不存在时加载。
  • @ConditionalOnProperty:配置文件中属性存在时加载。
  • @ConditionalOnMissingClass:类不存在时加载。

📌 十一、Spring Boot 常用配置参数(application.yml)

复制代码
# 配置数据源
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydb
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

# 配置 MyBatis
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.example.model

# 配置日志
logging:
  level:
    com.example: debug

# 配置 Actuator
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

🧪 十二、Spring Boot 实战建议

📎 十三、完整 Spring Boot 项目结构示例

src

├── main

│ ├── java

│ │ └── com.example

│ │ ├── MyApplication.java

│ │ ├── controller

│ │ │ └── UserController.java

│ │ ├── service

│ │ │ └── UserService.java

│ │ └── repository

│ │ └── UserRepository.java

│ └── resources

│ ├── application.yml

│ ├── mapper

│ │ └── UserMapper.xml

│ └── data.sql

📄 十四、Spring Boot 常见问题定位工具

📌 十五、Spring Boot 常用命令行参数

📚 十六、推荐学习资料

✅ 十七、总结:Spring 开发必会知识点

相关推荐
摇滚侠8 分钟前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY32 分钟前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克31 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠2 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌2 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局2 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
阿丰资源2 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it3 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java
消失的旧时光-19433 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
NE_STOP4 小时前
Redis--发布订阅命令和Redis事务
java