Spring 框架基础知识

📅 2026/8/24 13:38:31
Spring 框架基础知识
文章目录Spring 框架概述Spring 核心模块架构IoC控制反转与 DI依赖注入什么是 IoC什么是 DIDI 的三种注入方式IoC 容器Bean 管理Bean 的作用域Bean 的生命周期AOP面向切面编程核心概念五种通知类型典型应用场景AOP 代理机制配置方式XML 配置注解配置主流Java 配置类常用核心注解速查Spring 事务管理Spring、Spring MVC、Spring Boot 的关系面试高频考点Spring 框架概述Spring 是一款优秀的开源、轻量级、分层的 Java 企业应用开发框架由 Rod Johnson 于 2003 年发起核心目标是解耦、简化开发、管理对象。核心特性轻量级不强制依赖特定容器POJO 编程无侵入性IoC控制反转将对象创建和依赖管理交给 Spring 容器AOP面向切面编程不修改源码即可横向扩展功能日志、事务、权限等声明式事务管理通过注解简化事务处理一站式解决方案模块化设计可按需使用各子模块Spring 核心模块架构模块功能说明Spring Core核心容器提供 IoC 和 DI 功能Spring BeansBean 工厂IoC 容器核心实现Spring Context扩展容器提供国际化、事件、资源加载等Spring AOP面向切面编程支持Spring DAO/JDBC数据访问抽象简化 JDBC 操作Spring ORM对象关系映射支持Hibernate、JPA 等Spring Web MVCMVC 模式的 Web 框架Spring TX声明式事务管理Spring Test单元测试和集成测试支持IoC控制反转与 DI依赖注入什么是 IoC传统开发中对象由开发者通过new主动创建IoC 将对象的创建、管理、依赖关系的控制权转移给 Spring 容器程序直接使用即可。通俗理解以前你饿了要自己做饭new 对象现在交给 Spring 这个餐厅你只需要说我要什么菜它帮你做好端上来。什么是 DIDI 是 IoC 的具体实现方式——Spring 容器自动将依赖对象注入到当前对象中。DI 的三种注入方式① 构造器注入推荐publicclassDeptService{privatefinalDeptMapperdeptMapper;publicDeptService(DeptMapperdeptMapper){this.deptMapperdeptMapper;}}beaniddeptServiceclasscom.service.DeptServiceconstructor-argnamedeptMapperrefdeptMapper//bean② Setter 方法注入publicclassDeptService{privateDeptMapperdeptMapper;publicvoidsetDeptMapper(DeptMapperdeptMapper){this.deptMapperdeptMapper;}}③ 字段注入注解方式AutowiredprivateDeptMapperdeptMapper;️ 字段注入虽然简洁但不利于测试和不可变性官方推荐构造器注入。IoC 容器Spring 提供两个核心容器接口容器特点BeanFactory顶层接口延迟初始化getBean 时才创建轻量ApplicationContextBeanFactory 的子接口立即初始化功能更强国际化、事件、AOP 等日常开发首选常用的 ApplicationContext 实现类ClassPathXmlApplicationContext基于类路径 XML 配置AnnotationConfigApplicationContext基于注解配置Bean 管理Bean 的作用域作用域说明singleton单例默认整个容器只有一个实例prototype多例每次 getBean 都创建新实例request一次 HTTP 请求一个实例Web 环境session一次 HTTP 会话一个实例Web 环境Bean 的生命周期完整的生命周期流程如下1. 实例化通过反射创建对象 2. 属性填充依赖注入 3. 初始化前置处理BeanPostProcessor#postProcessBeforeInitialization 4. 初始化方法PostConstruct / InitializingBean#afterPropertiesSet / init-method 5. 初始化后置处理BeanPostProcessor#postProcessAfterInitialization 6. 就绪可用Bean 可被使用 7. 销毁PreDestroy / DisposableBean#destroy / destroy-methodAOP面向切面编程核心概念AOP 允许在不修改原有业务代码的情况下横向扩展功能。术语含义切面Aspect封装横切关注点的类切入点Pointcut定义要拦截的目标方法通知Advice增强逻辑即切面中具体执行的动作连接点JoinPoint程序执行过程中的某个点方法调用、异常等目标对象Target被代理的对象五种通知类型Before前置通知目标方法执行前After后置通知目标方法执行后无论是否异常AfterReturning返回通知目标方法正常返回后AfterThrowing异常通知目标方法抛出异常后Around环绕通知包裹目标方法最强大典型应用场景日志记录、事务管理、权限校验、接口限流、性能监控AOP 代理机制JDK 动态代理基于接口实现目标类必须实现接口CGLIB 代理基于继承实现通过生成子类代理目标类无需实现接口配置方式Spring 支持三种配置方式可混合使用XML 配置beaniduserServiceclasscom.service.UserServicepropertynameuserDaorefuserDao//bean注解配置主流ComponentpublicclassUserService{AutowiredprivateUserDaouserDao;}Java 配置类ConfigurationpublicclassAppConfig{BeanpublicUserServiceuserService(){returnnewUserService(userDao());}}常用核心注解速查注解用途Component通用 Bean 声明Service业务层 Bean 声明Repository数据访问层 Bean 声明Controller控制层 Bean 声明Autowired按类型自动注入Qualifier指定注入的 Bean 名称Primary标记优先注入的 BeanValue注入简单值或配置属性Scope指定 Bean 作用域PostConstruct初始化回调方法PreDestroy销毁回调方法Transactional声明式事务管理Spring 事务管理Spring 事务的核心是声明式事务通过Transactional注解实现底层基于 AOP 动态代理完成事务的拦截、提交和回滚。关键属性传播行为propagation定义事务的传播方式REQUIRED、REQUIRES_NEW 等隔离级别isolation定义事务的隔离程度超时时间timeout事务最大执行时间只读readOnly标记只读事务优化性能回滚规则rollbackFor指定哪些异常触发回滚Spring、Spring MVC、Spring Boot 的关系Spring Boot └── 整合了 Spring Spring MVC ├── Spring底层核心框架IoC、AOP、事务 └── Spring MVCSpring 的 Web 层模块负责请求分发和接口开发Spring基础框架提供 IoC、AOP 等核心能力Spring MVCSpring 的 Web 模块处理 HTTP 请求Spring Boot简化 Spring 配置的脚手架提供自动配置、起步依赖、内嵌服务器等面试高频考点IoC 和 DI 的原理是什么AOP 的实现原理JDK 动态代理 vs CGLIBBean 的生命周期和作用域Spring 如何解决循环依赖三级缓存机制Autowired的底层原理Transactional事务失效的常见场景学习建议先掌握 IoC 和 AOP 两大核心再逐步深入 Bean 管理、事务、Spring MVC 等模块最后结合 Spring Boot 进行实战项目开发。