完整教程:Fullstack 面试复习笔记:Spring / Spring Boot / Spring Data / Security 整理
Fullstack 面试复习笔记:Spring / Spring Boot / Spring Data / Security 整理
之前的笔记:
- Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理
- Fullstack 面试复习笔记:Java 基础语法 / 核心特性体系化总结
- Fullstack 面试复习笔记:项目梳理总结
- [spring] spring AOP - 面向切面编程の学习
这篇是 AOP 部分的补充说明
这篇笔记主要会过一遍 Spring 的核心内容,不会特别的详尽,知识需要过一下脑子的关键点,毕竟虽然说是全栈,不过最近找的项目还是以重前端为主
Spring Core
IoC/DI
- IoC(Inversion of Control) 容器负责创建对象(Bean)并注入依赖,开发者只需声明,不需手动 new
如果像使用非框架那样,开发实现 clas,实例化对象,那就属于正向流程,而不是控制反转(IoC) - DI(Dependency Injection)是实现 IoC 的主要方式,Spring 支持多种注入方式
现在除了 constructor injection 是官方最推荐的使用方式之外,其他的有点慢慢或是已经退出了 Spring 6 的世界里- 构造器注入(Constructor Injection)– 官方推荐
使用构造函数传入依赖,利于测试、线程安全、明确依赖关系@Component public class OrderService { private final PaymentService paymentService; @Autowired // 可省略(若只有一个构造器) public OrderService(PaymentService paymentService) { this.paymentService = paymentService; } } - 字段注入(Field Injection)
使用@Autowired注解直接注入到类字段,不利于测试与封装@Autowired private PaymentService paymentService; - Setter 注入(Setter Injection)
提供 setter 方法并通过注解注入依赖,可选但冗长,现代项目很少用java CopyEdit private PaymentService paymentService; @Autowired public void setPaymentService(PaymentService paymentService) { this.paymentService = paymentService; } - XML 配置注入(XML-based Injection)(已弃用)
早期通过 XML 显式配置依赖关系,现在基本已被 Java Config / 注解方式取代<bean id="orderService" class="com.example.OrderService"> <property name="paymentService" ref="paymentService"/> < /bean>
- 构造器注入(Constructor Injection)– 官方推荐
- 核心注解:
@Component、@Service、@Repository、@Controller@Autowired(或构造注入 + Lombok@RequiredArgsConstructor)
Context and Bean
ApplicationContext是 Spring 的核心容器接口,支持 Bean 生命周期管理、事件发布等- Bean 定义方式:
- 自动扫描:使用
@Component及派生注解 +@ComponentScan
核心注解参考上一段 - 显式注册:
@Configuration类 +@Bean方法- 第三方类无法加注解
- Bean 构造过程需要自定义逻辑或初始化参数
- 如 Spring Security 中注册密码加密器
@Configuration public class SecurityConfig { @Bean public PasswordEncoder passwordEncoder( ) { return new BCryptPasswordEncoder( ) ; } } - 搭配条件注解(如
@Profile,@ConditionalOnMissingBean等)实现灵活配置
- 自动扫描:使用
- 在 Spring Boot 中:
@SpringBootApplication等价于@Configuration + @EnableAutoConfiguration + @ComponentScan- 默认扫描主类所在包及其子包下的组件,无需显式写
@ComponentScan ApplicationContext会自动完成组件扫描和 Bean 注册,避免 XML 或手动配置
- Scope 管理:
- 默认
singleton - 还有
prototype、request、session(用于 Web 项目)
- 默认
- Bean 生命周期流程:
- 实例化(Constructor)
- 属性注入(DI)
- 初始化(可通过
InitializingBean、@PostConstruct) - 使用中(被容器托管)
- 销毁(可通过
DisposableBean、@PreDestroy)
- 扩展机制(了解即可):
BeanPostProcessor:对初始化前后进行拦截增强BeanFactoryPostProcessor:在 BeanFactory 加载完成前修改其定义(如 Spring Boot 自动配置)
AOP
- 用于抽离横切关注点(如日志、事务、安全),核心依赖于动态代理(JDK or CGLIB)
- 使用
@Aspect+@Around/@Before/@AfterReturning等注解实现切面逻辑 - 常见应用:记录日志、方法执行时间、鉴权校验、统一异常处理等
之前有在另外一篇笔记补过具体的用法: [spring] spring AOP - 面向切面编程の学习
Spring Boot
这部分上面有点重复,不过这里强调一下
- Spring Boot 简化配置和启动,主打“约定优于配置”
@SpringBootApplication=@Configuration+@EnableAutoConfiguration+@ComponentScan- 自动配置原理基于
spring.factories(或 Spring 6 的spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports) - 常用配置文件:
application.ymlorapplication.properties @ConfigurationProperties可绑定配置到 Bean,适用于大型嵌套结构配置
Spring Data JPA/ORM
- Spring Data JPA 提供了 Repository 接口(如
JpaRepository)来简化 DAO 层 - 使用
@Entity/@Table/@Id/@GeneratedValue声明实体类 - 支持方法命名规则生成查询方法,如
findByNameAndStatus() @Query可自定义 JPQL / 原生 SQL- 默认使用 Hibernate 做 JPA 实现(在 Boot 中为 starter-data-jpa)
Spring Security
- Spring Security 提供身份认证和权限控制框架,支持 form login / JWT / OAuth
- 自定义
UserDetailsService实现登录逻辑(Session-based or Token-based) - 新版本使用
SecurityFilterChain代替WebSecurityConfigurerAdapter - 权限控制:基于 URL 的拦截规则 + 方法级别的
@PreAuthorize - 可通过配置关闭 CSRF、开启跨域、定制 login/logout 行为等
Spring MVC
- 处理 Web 请求的模块,基于 DispatcherServlet + 多个 HandlerMapping/Adapter 实现
- 常用注解:
@RestController,@RequestMapping,@GetMapping,@PostMapping,@RequestBody,@PathVariable - 数据绑定:Spring 自动将 HTTP 请求参数绑定到 Java 对象(通过
@ModelAttribute、JSON → Object) - 异常处理:
@ControllerAdvice+@ExceptionHandler - Spring Boot 默认集成 MVC,无需额外配置

浙公网安备 33010602011771号