news 2026/2/25 23:51:10

【Spring全家桶】-一文弄懂Spring框架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Spring全家桶】-一文弄懂Spring框架

Spring面试宝典:从“小白”到“大神”

Spring框架就像编程界的“瑞士军刀”,功能多到让人眼花缭乱!本文将用最接地气的语言,带你轻松掌握Spring的核心知识,保证面试官问不倒你!


📚 文章目录

🏗️ 基础模块

  • Bean生命周期
  • 依赖注入
  • AOP面向切面编程
  • Spring MVC架构
  • Spring Boot自动配置
  • Spring Cloud微服务

📦 核心概念

  • Bean作用域
  • IoC控制反转
  • Spring Data JPA
  • 事务管理
  • Spring Security安全
  • 自动配置原理

🔧 高级特性

  • 服务发现与注册
  • Actuator监控
  • WebFlux响应式编程
  • 总结与互动

👶Bean生命周期:Bean的“一生”

专业解释
Spring Bean生命周期包括实例化、属性注入、初始化、使用和销毁等阶段,通过多个Aware接口和BeanPostProcessor实现回调机制。

大白话
就像一个婴儿的成长过程:出生(实例化)→ 喝奶(注入属性)→ 学走路(初始化)→ 长大工作(使用)→ 退休(销毁)。

完整生命周期流程

实例化 → 属性注入 → BeanNameAware → BeanFactoryAware → ApplicationContextAware → BeanPostProcessor前置处理 → InitializingBean → 自定义init方法 → BeanPostProcessor后置处理 → Bean就绪可用 → 使用中 → 容器关闭 → DisposableBean → 自定义destroy方法

代码示例

@ComponentpublicclassMyBeanimplementsInitializingBean,DisposableBean{@OverridepublicvoidafterPropertiesSet()throwsException{System.out.println("Bean初始化完成,准备就绪!");}@Overridepublicvoiddestroy()throwsException{System.out.println("Bean即将销毁,清理资源...");}}

💉依赖注入:Spring的“相亲大会”

专业解释
依赖注入(DI)是IoC的一种实现方式,通过容器将依赖关系注入到对象中,降低组件间的耦合度。

大白话
就像相亲平台,你不用自己找对象(依赖),平台(Spring容器)给你匹配好送到面前。

三种注入方式

// 1. 构造器注入(推荐!)@ServicepublicclassUserService{privatefinalUserRepositoryuserRepository;@Autowired// Spring 4.3+ 可省略publicUserService(UserRepositoryuserRepository){this.userRepository=userRepository;}}// 2. Setter注入@ServicepublicclassOrderService{privatePaymentServicepaymentService;@AutowiredpublicvoidsetPaymentService(PaymentServicepaymentService){this.paymentService=paymentService;}}// 3. 字段注入(不推荐,但简单)@ServicepublicclassProductService{@AutowiredprivateInventoryServiceinventoryService;}

✂️AOP:Spring的"特工007"

专业解释
面向切面编程(AOP)通过横向切割关注点,将日志、事务、安全等通用功能模块化。

大白话
就像电影里的特工,神不知鬼不觉地在主角(业务代码)周围执行任务(日志、事务等),还不影响主线剧情。

AOP核心概念

术语解释生活比喻
切面(Aspect)横切关注点的模块化特工组织
连接点(Join Point)程序执行中的某个点主角的关键时刻
通知(Advice)在连接点执行的动作特工的任务
切点(Pointcut)匹配连接点的表达式任务执行时机
织入(Weaving)将切面应用到目标对象特工潜入

💰事务管理:Spring的"银行柜员"

专业解释
Spring通过声明式或编程式事务管理,确保数据库操作的ACID特性(原子性、一致性、隔离性、持久性)。

大白话
就像银行转账,要么全部成功(A转出,B收到),要么全部失败(回滚),不会出现钱丢了的情况。

事务传播行为

传播行为解释生活比喻
REQUIRED(默认)有事务就加入,没有就新建有车就搭车,没车就打车
REQUIRES_NEW总是新建事务,挂起当前自己有车,不搭别人的
SUPPORTS有事务就加入,没有就算了有车搭车,没车走路
NOT_SUPPORTED非事务执行,挂起当前我走路,不坐车

🌐Spring MVC:请求的"旅行指南"

专业解释
Spring MVC基于前端控制器模式,通过DispatcherServlet统一处理请求,实现MVC分层架构。

大白话
就像去旅游:你(请求)找导游(DispatcherServlet),导游安排交通(HandlerMapping)、住宿(Controller)、景点(View),最后送你回家(Response)。

Spring MVC工作流程

HTTP请求 → DispatcherServlet → HandlerMapping → Controller → ModelAndView → ViewResolver → View → HTTP响应

代码示例

@RestController@RequestMapping("/api/users")publicclassUserController{@AutowiredprivateUserServiceuserService;// GET /api/users/1@GetMapping("/{id}")publicResponseEntity<User>getUser(@PathVariableLongid){Useruser=userService.getUserById(id);returnResponseEntity.ok(user);}}

🚀Spring Boot:Spring的"懒人包"

专业解释
Spring Boot通过自动配置、起步依赖和内嵌服务器,简化Spring应用的初始搭建和开发过程。

大白话
如果说Spring是乐高零件,需要自己组装,那Spring Boot就是已经拼好的乐高模型,开箱即用!

Spring vs Spring Boot对比

特性Spring(传统)Spring Boot(现代)
配置方式XML或Java Config自动配置+注解
服务器需要外部Tomcat内嵌Tomcat/Jetty
依赖管理手动管理版本起步依赖(starter)
部署方式打包成WAR部署可执行JAR

☁️Spring Cloud:微服务的"联合国"

专业解释
Spring Cloud基于Spring Boot,提供分布式系统开发的一站式解决方案,包括服务发现、配置管理、熔断器等。

大白话
如果Spring Boot是单个国家(微服务),那Spring Cloud就是联合国,协调各国(服务)之间的外交(通信)。

Spring Cloud核心组件

组件作用比喻
Eureka服务注册与发现电话簿
Config统一配置管理中央文件柜
Zuul/GatewayAPI网关公司前台
Ribbon客户端负载均衡轮班表

🔐Spring Security:应用的"保安队长"

专业解释
Spring Security提供全面的安全服务,包括认证、授权、攻击防护等,基于过滤器链实现安全控制。

大白话
就像公司的保安系统:刷卡进门(认证)、权限门禁(授权)、监控摄像头(安全防护)。

Spring Security配置

@Configuration@EnableWebSecuritypublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{@Overrideprotectedvoidconfigure(HttpSecurityhttp)throwsException{http.authorizeRequests().antMatchers("/","/home").permitAll().antMatchers("/admin/**").hasRole("ADMIN").anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll();}}

🎯Bean作用域:Bean的"社交圈"

专业解释
Bean作用域定义了Bean的生命周期和可见范围,Spring支持多种作用域以适应不同场景。

七大作用域

作用域解释生活比喻代码示例
Singleton(默认)容器中只有一个实例公司的CEO,只有一个@Scope("singleton")
Prototype每次请求都创建新实例一次性纸杯,用完就扔@Scope("prototype")
Request每个HTTP请求一个实例快递包裹,每个都不同@Scope("request")
Session每个HTTP会话一个实例购物车,每人一个@Scope("session")

🔄IoC控制反转:Spring的"托管所"

专业解释
控制反转(IoC)将对象的创建、依赖管理交给容器处理,实现组件间的解耦。

大白话
以前是你自己带孩子(创建和管理对象),现在送到托管所(Spring容器),老师(容器)负责喂饭(依赖注入)、哄睡(生命周期管理)。

三种配置方式对比

方式优点缺点示例
XML配置集中管理,修改无需编译冗长,类型不安全<bean id="user" class="User"/>
注解配置简洁,与代码紧密结合分散,硬编码@Component@Autowired
Java Config类型安全,IDE友好需要编写配置类@Configuration@Bean

📊Spring Data JPA:数据库的"翻译官"

专业解释
Spring Data JPA基于JPA规范,通过Repository抽象层简化数据访问代码,支持方法名查询、分页、排序等。

大白话
以前和数据库交流需要写SQL(外语),现在用Spring Data JPA(翻译官),说Java它就能懂!

Spring Data JPA核心特性

// 定义Repository接口(Spring自动实现!)publicinterfaceUserRepositoryextendsJpaRepository<User,Long>{// 方法名自动生成查询List<User>findByUsername(Stringusername);List<User>findByEmailContaining(Stringkeyword);// 分页查询Page<User>findByAgeGreaterThan(intage,Pageablepageable);// 自定义查询@Query("SELECT u FROM User u WHERE u.username LIKE %:keyword%")List<User>searchUsers(@Param("keyword")Stringkeyword);}

🤖自动配置:Spring Boot的"读心术"

专业解释
Spring Boot通过条件注解(@Conditional)和starter依赖,自动配置应用程序所需组件。

大白话
就像智能家居,你买了空调(添加依赖),系统自动安装、连接电源、设置温度(自动配置),你只需要享受凉爽!

条件注解大全

注解作用示例
@ConditionalOnClass类路径存在指定类@ConditionalOnClass(DataSource.class)
@ConditionalOnMissingBean容器中不存在指定Bean@ConditionalOnMissingBean(DataSource.class)
@ConditionalOnProperty配置属性满足条件@ConditionalOnProperty(name="spring.datasource.url")
@ConditionalOnWebApplication是Web应用@ConditionalOnWebApplication

🔍服务发现:微服务的"GPS导航"

专业解释
服务发现允许微服务动态注册和发现彼此,通过注册中心实现服务地址的解耦。

大白话
就像外卖平台,餐厅(服务提供者)注册地址,顾客(服务消费者)查找餐厅,配送员(负载均衡)选择最近路线。

Eureka服务注册发现

// 1. Eureka Server(注册中心)@SpringBootApplication@EnableEurekaServer// 开启Eureka服务器publicclassEurekaServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(EurekaServerApplication.class,args);}}// 2. 服务提供者@SpringBootApplication@EnableEurekaClient// 注册到EurekapublicclassUserServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(UserServiceApplication.class,args);}}

📈Actuator监控:应用的"体检中心"

专业解释
Spring Boot Actuator提供生产级监控端点,用于检查应用健康状态、收集度量指标、查看配置信息等。

大白话
就像给应用做全面体检,血压(内存)、心跳(线程)、体温(CPU),哪里有问题一目了然!

常用监控端点

端点路径作用示例输出
health/actuator/health应用健康状态{"status":"UP"}
info/actuator/info应用信息{"app":{"name":"用户服务"}}
metrics/actuator/metrics度量指标{"names":["jvm.memory.used"]}
env/actuator/env环境变量{"profiles":["dev"]}

WebFlux:响应式的"高速公路"

专业解释
Spring WebFlux基于Reactive Streams规范,使用非阻塞IO和函数式编程,适合高并发、低延迟场景。

大白话
如果Spring MVC是普通公路(阻塞IO),那WebFlux就是高速公路(非阻塞IO),车流量大还不堵车!

Spring MVC vs WebFlux对比

特性Spring MVC(传统)WebFlux(响应式)
编程模型命令式,同步阻塞响应式,非阻塞
IO模型阻塞IO非阻塞IO
并发模型每个请求一个线程事件循环,少量线程
适用场景CRUD应用,传统业务实时应用,高并发

WebFlux代码示例

@RestController@RequestMapping("/api/users")publicclassUserController{@AutowiredprivateUserRepositoryuserRepository;// 返回Flux(多个用户)@GetMappingpublicFlux<User>getAllUsers(){returnuserRepository.findAll();}// 返回Mono(单个用户)@GetMapping("/{id}")publicMono<User>getUserById(@PathVariableLongid){returnuserRepository.findById(id);}}

💬总结与互动

Spring生态就像一棵大树,Spring Framework是树根,Spring Boot是树干,Spring Cloud是树枝,各种Starter是树叶。理解这个体系,就能游刃有余地构建企业级应用。

Spring知识体系全景图

Spring生态 ├── Spring Framework(基础框架) │ ├── 核心容器(IoC、Bean生命周期) │ ├── AOP(面向切面编程) │ ├── 数据访问(JDBC、事务) │ └── Web模块(MVC、WebFlux) ├── Spring Boot(快速开发) │ ├── 自动配置 │ ├── 起步依赖 │ ├── 内嵌容器 │ └── Actuator监控 ├── Spring Cloud(微服务) │ ├── 服务发现(Eureka) │ ├── 配置中心(Config) │ ├── API网关(Gateway) │ └── 熔断器(Hystrix) ├── Spring Data(数据访问) │ ├── JPA │ ├── MongoDB │ └── Redis └── Spring Security(安全) ├── 认证授权 ├── OAuth2 └── JWT

🤔 互动时间

评论区聊聊你的Spring学习经历吧:

  1. 你在Spring开发中踩过最大的坑是什么?
  2. 你更喜欢XML配置还是注解配置?为什么?
  3. 微服务架构中,你觉得最难的部分是什么?
  4. 如果让你用一句话形容Spring,你会说什么?

分享你的"Spring成长故事",点赞最高的送虚拟"Spring框架手办"一个!


📝 转载声明

转载请注明原文链接和作者信息。
欢迎转发分享,让更多小伙伴加入Spring的学习行列!


最后送大家一句话

Spring不是一天学会的,
但每天学一点,终将成为Spring大师!

祝大家工作顺利,代码无Spring Bug!🚀

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 10:24:47

生产线自动装箱的plc控制程序(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

生产线自动装箱的plc控制程序(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码CPU型号:S7-1200 博图 包含HMI触摸屏仿真&#xff0c;配套报告说明书控制要求 (1)按下控制装置启动按钮后&#xff0c;传送带B先启动运行&#xff0…

作者头像 李华
网站建设 2026/2/24 12:18:05

交通灯plc s7-1200博图(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

交通灯plc s7-1200博图(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码用于课程设计等含报告 程序仿真全套 南北方向绿灯和东西方向绿灯不能同时亮。如果同时亮&#xff0c;则应自动立即关闭信号灯系统&#xff0c;并立即发出报…

作者头像 李华
网站建设 2026/2/16 8:38:49

PLC皮带运输机运输系统仿真(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

PLC皮带运输机运输系统仿真(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码三菱PLC编程软件GXWorks2/3与触摸屏组态软件GT Designer3仿真 1.10表软元件说明 2.PLC接线图主电路图流程图 3.梯形图仿真指令表 4.设计报告(Word文件…

作者头像 李华
网站建设 2026/2/20 17:27:20

【RL】ROLL中各DP数据同步

好的&#xff0c;我们来详细解释一下 MegatronInferStrategy 类中的 get_data_input 函数&#xff0c;并举例说明其在分布式环境下的工作方式以及 batch 的形状。 一、核心目标 (Core Goal) get_data_input 函数的核心目标是&#xff1a;在复杂的分布式并行环境中&#xff0c…

作者头像 李华
网站建设 2026/2/22 17:04:55

HTML搭好台,CSS属性大全来救场——前端萌新的生存口粮

HTML搭好台&#xff0c;CSS属性大全来救场——前端萌新的生存口粮 HTML搭好台&#xff0c;CSS属性大全来救场——前端萌新的生存口粮div不是弟弟威&#xff0c;HTML先给你搭个破草台盒模型&#xff1a;外边距塌陷&#xff0c;内边距撑爆&#xff0c;人生也如此margin 塌陷&…

作者头像 李华