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 开发必会知识点

相关推荐
爱隐身的官人3 小时前
新后端漏洞(上)- Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)
java·tomcat·ajp
@CLoudbays_Martin113 小时前
为什么动态视频业务内容不可以被CDN静态缓存?
java·运维·服务器·javascript·网络·python·php
四谎真好看3 小时前
Java 学习笔记(进阶篇2)
java·笔记·学习
上官浩仁3 小时前
springboot ioc 控制反转入门与实战
java·spring boot·spring
deepwater_zone3 小时前
Spring 微服务
spring·微服务
叫我阿柒啊4 小时前
从Java全栈到前端框架:一位程序员的实战之路
java·spring boot·微服务·消息队列·vue3·前端开发·后端开发
mqiqe4 小时前
架构-亿级流量性能调优实践
java·架构
中国胖子风清扬4 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust
野犬寒鸦5 小时前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode