当前位置: 首页 > news >正文

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>
  • 核心注解:
    • @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 {@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
        }
        
      • 搭配条件注解(如 @Profile, @ConditionalOnMissingBean 等)实现灵活配置
  • Spring Boot 中:
    • @SpringBootApplication 等价于 @Configuration + @EnableAutoConfiguration + @ComponentScan
    • 默认扫描主类所在包及其子包下的组件,无需显式写 @ComponentScan
    • ApplicationContext 会自动完成组件扫描和 Bean 注册,避免 XML 或手动配置
  • Scope 管理:
    • 默认 singleton
    • 还有 prototyperequestsession(用于 Web 项目)
  • Bean 生命周期流程:
    1. 实例化(Constructor)
    2. 属性注入(DI)
    3. 初始化(可通过 InitializingBean@PostConstruct
    4. 使用中(被容器托管)
    5. 销毁(可通过 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 or application.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,无需额外配置

相关文章:

  • 本地部署企业邮箱,让企业办公更安全高效
  • 华为云Flexus+DeepSeek征文|基于华为云Flexus X和DeepSeek-R1打造个人知识库问答系统
  • Github 2025-06-06 Java开源项目日报Top10
  • [BIOS]VSCode zx-6000 编译问题
  • (一)上市企业实施IPD成功案例分享之——方太
  • OpenCV 图像色彩空间转换与抠图
  • 网络流学习笔记 - 最大流最小割
  • JVM——打开JVM后门的钥匙:反射机制
  • Javascript 编程基础(5)面向对象 | 5.1、构造函数实例化对象
  • RFID推动新能源汽车零部件生产系统管理应用案例
  • 汽车免拆诊断案例 | 2010款捷豹XFL车制动警告灯、DSC警告灯异常点亮
  • 算法打卡16天
  • CANFD 数据记录仪在汽车售后解决偶发问题故障的应用
  • 电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
  • 六级作文模板笔记
  • AC68U刷梅林384/386版本后不能 降级回380,升降级解决办法
  • AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
  • 「基于连续小波变换(CWT)和卷积神经网络(CNN)的心律失常分类算法——ECG信号处理-第十五课」2025年6月6日
  • 柴油发电机组接地电阻柜的作用
  • 【Maven打包错误】 Fatal error compiling: 错误: 不支持发行版本 21
  • 企业英文网站制作/网络营销专业可以干什么工作
  • 网站建设服务版权归谁/百度直接打开
  • 东莞网站搭建找哪里/抖音网络营销案例分析
  • 用百度云服务器做网站/百家港 seo服务
  • 响应式网站psd/百度浏览器官网下载
  • 网站上文章分享的代码怎么做的/西安分类信息seo公司