Spring 核心怎么串起来:容器、MVC、事务、AOP 与启动机制

2次阅读
没有评论

Spring 的内容很多,如果一开始就分散看注解、事务、MVC、AOP,很容易越看越乱。更好的方式是把它们串成一张学习地图。

这张地图可以分成五块:容器、依赖注入、MVC、事务、AOP 和启动机制。

容器是底座

Spring 的核心是容器。容器负责创建对象、管理生命周期、处理依赖关系,并把对象组织成 Bean。

学习容器时可以重点看:

  • BeanFactory 和 ApplicationContext 的关系。
  • BeanDefinition 是什么。
  • refresh 流程大概做了哪些事。
  • 注解扫描如何把类变成 Bean。
  • BeanPostProcessor 为什么重要。

不需要一开始背完整源码,但要知道对象不是凭空出现的,是容器按规则创建和装配的。

依赖注入解决对象协作

依赖注入让业务类不用自己 new 依赖对象,而是交给容器装配。

常见问题包括:

  • @Autowired 按类型还是按名称匹配。
  • 一个接口多个实现时怎么选择。
  • @Qualifier@Primary 怎么用。
  • 循环依赖为什么有时能解决、有时不能。
  • SPI 或扩展点如何接入容器。

依赖注入的核心不是少写几行 new,而是让对象协作关系可管理、可替换、可测试。

MVC 是请求到方法的映射

Spring MVC 关注 HTTP 请求如何进入 Controller。

可以按这条链路理解:

请求 -> DispatcherServlet -> HandlerMapping -> HandlerAdapter -> Controller -> 返回结果

其中 @RequestMapping、参数绑定、返回值处理、异常处理都在这条链路上。

还要注意 Controller 默认是单例。如果 Controller 里放可变成员变量,就可能引入线程安全问题。

事务是业务边界

@Transactional 看起来简单,但真正要注意的是边界:

  • 哪些异常会触发回滚。
  • 内部方法调用为什么可能不生效。
  • 事务传播行为如何影响嵌套调用。
  • 事务提交后回调适合放什么逻辑。
  • 数据库事务和消息发送如何协调。

事务不是给所有方法都加注解,而是要围绕业务一致性边界来设计。

AOP 是横切能力

AOP 适合处理日志、监控、鉴权、事务、缓存等横切逻辑。

理解 AOP 时重点看:

  • JDK 动态代理和 CGLIB 的差异。
  • 代理对象和目标对象的区别。
  • 内部调用为什么绕过代理。
  • 切点表达式如何匹配方法。
  • javaagent 和 LTW 属于更底层的增强方式。

很多 Spring 事务问题,本质上也是代理问题。

启动机制把所有东西装起来

Spring Boot 的启动机制负责把配置、自动装配、内嵌容器和应用入口串起来。

学习时可以看:

  • SpringApplication.run 做了什么。
  • 自动配置如何生效。
  • 配置属性如何绑定。
  • fat jar 如何启动。
  • 启动钩子适合做哪些初始化。

把启动机制看懂后,很多“为什么这个 Bean 会存在”“为什么这个配置生效”的问题都会更清楚。

学习顺序建议

可以按这个顺序学:

  1. 容器和 Bean 生命周期。
  2. 依赖注入和多实现选择。
  3. MVC 请求链路。
  4. 事务边界和代理问题。
  5. AOP 动态代理。
  6. Spring Boot 启动和自动配置。

Spring 的核心不是某个注解,而是容器、代理和请求链路共同组成的一套运行模型。把模型串起来,零散知识点才会变得有方向。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-07-05发表,共计1296字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)