通俗易懂!Spring 核心特性一次讲透(2025面试最爱问的 6 大金刚)
| 核心特性 | 官方名字 | 一句大白话解释 | 现实中的比喻 | 日常最常用场景 |
|---|---|---|---|---|
| 1. IoC / DI | Inversion of Control / Dependency Injection | 本来是你自己 new 对象,现在全部交给 Spring 帮你造好、管好、给你用 | 你再也不用自己去4S店提车,Spring 是你的专职司机+管家 | @Component + @Autowired 随便用 |
| 2. AOP | Aspect Oriented Programming | 让你在不改原代码的情况下,统一加日志、权限、事务、缓存等 | 小区保安:所有进出的人都要刷卡、测温、登记 | @Transactional、自定义日志切面、权限校验 |
| 3. 声明式事务 | Declarative Transaction | 一行 @Transactional 就搞定事务开始、提交、回滚 | 银行ATM自动帮你管“转账成功才扣钱” | 几乎所有增删改业务方法上都写这个注解 |
| 4. SpEL | Spring Expression Language | 可以在配置里写表达式,运行时动态算值 | 像 Excel 公式一样灵活 | @Value(“#{2*30}”)、@ConditionalOnExpression |
| 5. 模块化 + 条件装配 | @Conditional 家族 | 只有满足条件才创建某个 Bean | 北方才装暖气,南方才装空调 | @Profile、@ConditionalOnProperty、@ConditionalOnMissingBean |
| 6. 事件机制 | ApplicationEvent + Listener | 像微信群一样,一个模块发消息,其他模块可以收到并处理 | 公司群里有人@all,所有人都知道 | 用户注册成功后自动发欢迎邮件、刷新缓存等 |
1. IoC / DI(最最最核心!占面试 40%)
- 以前:UserService userService = new UserServiceImpl();
- 现在:只需要在 UserServiceImpl 上写 @Service,别的类写 @Autowired 就行
- Spring 启动时就把所有 Bean 造好放进一个大 Map(ApplicationContext),你要用就直接从 Map 里拿
2. AOP(程序员的降维打击武器)
你只需要写一次“横切逻辑”,Spring 自动把它插到几百个方法的前后:
@Around("@annotation(Transactional)")
public Object autoTransaction(ProceedingJoinPoint pjp) { ... } // 自动事务
常用切面:
- 事务(最常用)
- 日志(打印入参出参、耗时)
- 权限校验
- 防止重复提交
- 缓存(@Cacheable)
3. 声明式事务(程序员幸福感 Top1)
以前要写 20 行 try-catch-finally + connection.commit/rollback
现在只写一行:
@Transactional(rollbackFor = Exception.class)
public void transferMoney() { ... }
Spring 自动帮你:
- 方法开始 → 开事务
- 方法正常结束 → 提交
- 抛异常 → 回滚
- 还支持传播行为(REQUIRED、REQUIRES_NEW 等7种)
4. 其他三大“隐藏大招”
- SpEL:可以在配置文件里写计算、判断、三元运算
示例:@Value(“#{systemProperties[‘user.region’] == ‘CN’ ? ‘国内配置’ : ‘国际配置’}”) - @Conditional 家族:开发神器!
开发环境用 H2 数据库,生产环境用 MySQL?一句话搞定:
@Configuration
@ConditionalOnProperty(name = "env", havingValue = "dev")
- 事件机制:解耦神器
用户注册 → 发事件 → 3 个监听器同时干活(发邮件、送积分、写日志)
2025 年面试必问的终极总结口诀(背下来直接加30分)
“Spring 核心就是两把刀 + 一把枪:
IoC 刀砍乱 new,DI 刀砍硬编码,
AOP 刀横扫日志事务缓存权限,
声明式事务一把枪秒杀 try-catch-commit-rollback,
再配 SpEL、@Conditional、事件机制三件套,
天下我有!”
记住这6个特性 + 上面这句口诀,
面试官问“Spring 核心特性有哪些”,你 2 分钟讲完直接满分!