Spring框架核心

Spring 框架核心详解(2025-2026 主流认知版)

Spring 框架发展到今天(Spring Framework 6.x + Spring Boot 3.x 时代),其核心已经非常清晰,主要围绕以下 6 大核心支柱 构建,几乎所有高级功能都是在这 6 个基础上的组合与扩展。

一、Spring 核心六大支柱(必须记住的骨架)

排名核心概念英文名称一句话本质作用是否 Spring Boot 默认开启2025-2026 重要程度
1控制反转 / 依赖注入IoC / DI把“new 对象”的权利交给容器★★★★★
2Bean 的生命周期与容器BeanFactory / ApplicationContext管理所有 Spring Bean 的创建、销毁、作用域等★★★★★
3AOP(面向切面编程)Aspect Oriented Programming在不改业务代码前提下插入横切逻辑(日志、事务等)是(但需加注解)★★★★☆
4@Configuration + Java 配置Java-based Configuration用纯 Java 代码替代 XML 配置是(Spring Boot 主流)★★★★☆
5自动装配与条件装配@Autowired / @Conditional自动找 bean + 根据条件决定是否创建 bean★★★★☆
6核心注解驱动开发@Component / @Service / @Repository 等声明式开发,替代传统 XML bean 定义★★★★☆

二、最核心概念逐一拆解(通俗版 + 代码示例)

1. IoC 容器与 DI(最重要,占 Spring 灵魂 60%)

一句话
你不用自己 new,由 Spring 容器帮你创建对象并把依赖“注入”进来。

三种注入方式(2025 年主流写法)

@Service
public class OrderService {

    // 方式1:字段注入(最常见,但不推荐用于生产)
    @Autowired
    private UserRepository userRepo;

    // 方式2:构造器注入(官方 2025 年最推荐写法)
    private final PaymentService paymentService;

    @Autowired   // Spring 4.3+ 后单参构造器可省略 @Autowired
    public OrderService(PaymentService paymentService) {
        this.paymentService = paymentService;
    }

    // 方式3:Setter 注入(适合可选依赖)
    private EmailService emailService;

    @Autowired(required = false)  // 可选注入
    public void setEmailService(EmailService emailService) {
        this.emailService = emailService;
    }
}

面试常问:为什么推荐构造器注入?
答:

  • 依赖不可变(final)
  • 依赖关系清晰(一目了然)
  • 更容易做单元测试(直接 new)
  • 避免循环依赖的部分场景

2. Bean 的作用域(Scope)

作用域说明使用场景默认值?
singleton整个容器只有一份几乎所有服务类、工具类
prototype每次获取都创建一个新对象有状态的 bean(如每次请求新对象)
request每个 HTTP 请求一个 beanWeb 环境下的 request 范围对象
session每个 HTTP Session 一个 bean用户会话级别的对象
application整个 ServletContext 一个 bean全局应用数据
websocket每个 WebSocket 会话一个 beanWebSocket 场景

代码写法(最常用两种)

@Component
@Scope("prototype")               // 每次 @Autowired 都新对象
public class TicketGenerator { ... }

@Bean
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public ShoppingCart shoppingCart() { ... }

3. AOP 的核心四要素(2025 年面试高频)

  1. 切面(Aspect) = 切点(Pointcut) + 通知(Advice)
  2. 通知类型(Advice 类型,按执行顺序):
  • @Before 前置
  • @AfterReturning 正常返回后
  • @AfterThrowing 抛异常后
  • @After 最终通知(类似 finally)
  • @Around 环绕(最强大,可控制目标方法是否执行)

最常用环绕通知写法(事务、日志、权限的典型模板)

@Aspect
@Component
public class LoggingAspect {

    @Around("@annotation(org.springframework.transaction.annotation.Transactional)")
    public Object logTransaction(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("开启事务:{}", joinPoint.getSignature());
        try {
            Object result = joinPoint.proceed();   // 执行目标方法
            log.info("事务提交");
            return result;
        } catch (Throwable e) {
            log.error("事务回滚", e);
            throw e;
        }
    }
}

4. Spring Boot 如何把这些核心简化到极致

Spring 经典写法Spring Boot 时代写法(2025 主流)简化了什么
XML + 定义@Component / @Service / @Repository告别 XML
ClassPathXmlApplicationContextSpringApplication.run()一行启动整个容器
@Autowired + @Qualifier@Autowired + 首字母小写 bean 名自动注入减少配置
手动配置 DataSource、JdbcTemplatespring-boot-starter-jdbc 自动配置零配置连接数据库

三、2025-2026 年 Spring 核心面试高频题(建议背熟)

  1. Spring IoC 容器启动过程中发生了什么?(BeanFactory → ApplicationContext → refresh() 十二大步骤)
  2. Bean 的生命周期完整 11 个阶段是哪些?(最常考前 7 个:实例化 → 属性填充 → 初始化前 → 初始化 → 使用 → 销毁前 → 销毁)
  3. @Autowired、@Resource、@Inject 的区别?
  4. Spring 如何解决循环依赖?(三级缓存机制)
  5. AOP 的底层实现原理?(动态代理:JDK Proxy vs CGLIB)
  6. Spring Boot 自动配置的原理?(@EnableAutoConfiguration → spring.factories → Condition 条件装配)

四、一句话总结 Spring 核心

Spring 的本质就是:帮你管理对象(IoC)、帮你注入依赖(DI)、帮你在不改代码的情况下插入额外逻辑(AOP),然后用一堆约定优于配置的方式把这一切变得极简(Spring Boot)。

如果你想深入某一块(比如循环依赖三级缓存、AOP 动态代理源码、BeanFactory 与 ApplicationContext 区别、@Conditional 家族全家桶),可以直接告诉我,我继续展开~

文章已创建 3958

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部