Fullstack 面试复习笔记:Spring / Spring Boot / Spring Data / Security 整理

发布于:2025-06-07 ⋅ 阅读:(24) ⋅ 点赞:(0)

Fullstack 面试复习笔记:Spring / Spring Boot / Spring Data / Security 整理

之前的笔记:

这篇笔记主要会过一遍 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 {
            @Bean
            public 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,无需额外配置

网站公告

今日签到

点亮在社区的每一天
去签到