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.yml
orapplication.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,无需额外配置