📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。
📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

一、IoC 容器核心依赖注入实现模式
构造器注入
构造器注入确保了对象的依赖在对象创建时就被注入,有助于确保对象在实例化时依赖关系是完整和一致的。在 Spring 中,通过在 Bean 的类定义中提供一个或多个构造函数,并在每个构造函数参数上使用 @Autowired
或 @Qualifier
注解来指定依赖项的 Bean。Spring 容器会查找与注解指定的 Bean 名称或类型匹配的 Bean,并将其作为参数传递给构造函数。
Setter 注入
Setter 注入通过调用对象的 Setter 方法来注入依赖,这种方式的灵活性较高,因为可以在对象创建后通过 Setter 方法修改依赖。在 Spring 中,使用 @Autowired
或 @Resource
注解在 Setter 方法上,Spring 容器会自动检测并注入依赖。
字段注入
字段注入是一种更为简洁的注入方式,通过在字段上使用 @Autowired
注解,Spring 容器会自动检测并注入依赖。字段注入的优点是代码更加简洁,但可能无法保证依赖注入的时机。
方法注入
方法注入允许在 Bean 定义中定义一个注入方法,并在该方法上使用 @Autowired
注解。Spring 容器在初始化 Bean 时会自动调用该方法并注入依赖。
组件扫描机制
Spring 的组件扫描机制允许自动检测类路径下带有特定注解的类,并将其注册为 Spring 容器中的 Bean。通过在配置类上使用 @ComponentScan
注解,可以指定组件扫描的范围,包括包路径、类路径等。
Bean 作用域
Spring 支持多种 Bean 作用域,包括 Singleton(单例)和 Prototype(原型)等。Singleton 作用域表示每个 Spring 容器中只有一个该 Bean 的实例,而 Prototype 作用域表示每次请求都会创建一个新的 Bean 实例。
条件化配置(@Conditional)
Spring 的 @Conditional
注解允许在满足特定条件时创建或注册 Bean。例如,可以使用 @ConditionalOnProperty
注解来根据配置文件中的属性值来决定是否创建某个 Bean。
二、AOP 技术体系
代理模式实现
AOP 技术通过代理模式实现对目标对象的增强。在 Spring AOP 中,有两种代理模式:JDK 动态代理和 CGLIB 代理。JDK 动态代理适用于实现了至少一个接口的类,而 CGLIB 代理适用于没有实现接口的类。
JDK 动态代理
JDK 动态代理通过实现 InvocationHandler
接口来创建代理对象。InvocationHandler
接口定义了 invoke
方法,该方法在代理对象上调用目标方法时被调用。
CGLIB 代理
CGLIB 代理通过动态生成目标类的子类来实现代理。CGLIB 代理适用于没有实现接口的类,并且可以拦截所有的方法调用。
切点表达式语法
Spring AOP 使用切点表达式来指定需要增强的方法。切点表达式语法包括方法签名、执行表达式和返回类型等。例如,execution(* com.example.service.*.*(..))
表示匹配 com.example.service
包下所有类的所有方法。
通知类型
通知类型包括前置通知、后置通知、环绕通知、异常通知和最终通知。前置通知在目标方法执行之前执行,后置通知在目标方法执行之后执行,环绕通知在目标方法执行前后都执行,异常通知在目标方法抛出异常时执行,最终通知在目标方法执行完成后执行。
AOP 应用场景
AOP 在日志管理、性能监控、事务管理、安全控制等方面有广泛的应用。例如,可以使用 AOP 来实现跨切面的日志记录、性能监控和事务管理。
三、数据持久化
JDBC 模板
Spring JDBC 模板简化了 JDBC 操作,通过封装 JDBC 操作的繁琐步骤,如连接数据库、创建语句、执行查询等,减少了代码量。Spring JDBC 模板提供了 JdbcTemplate
类,它封装了 JDBC 操作的细节。
事务管理
Spring 提供了声明式事务和编程式事务两种方式来管理事务。声明式事务通过在配置文件中定义事务边界来实现,编程式事务通过编程方式来控制事务。
ORM 集成
Spring 集成了 Hibernate 和 JPA,提供了 ORM 的支持。通过使用 EntityManager
或 Session
对象,可以实现对数据库对象的持久化操作。
会话管理
Spring 会话管理允许你管理数据库会话。通过使用 EntityManagerFactory
或 SessionFactory
对象,可以创建和管理数据库会话。
JPA 规范实现
Spring Data JPA 提供了 JPA 规范的实现,允许使用 JPA 注解和接口来定义实体类、映射和查询。
多数据源配置
Spring 支持多数据源配置,允许你同时使用多个数据库。通过配置不同的数据源和事务管理器,可以实现多数据源的事务管理。
四、Web 开发体系
MVC 架构
Spring MVC 框架遵循 MVC 架构模式,将应用分为控制器、视图和模型。控制器负责处理请求,模型负责业务逻辑,视图负责展示数据。
组件
Spring MVC 框架包含控制器、视图解析器、数据绑定器等组件。控制器负责处理请求,视图解析器负责解析视图,数据绑定器负责将请求参数绑定到模型对象。
RESTful 支持
Spring MVC 支持 RESTful 风格的 URL 和数据交换格式。通过使用 @RestController
和 @RequestMapping
注解,可以定义 RESTful 风格的控制器和请求映射。
异常处理机制
Spring MVC 提供了异常处理机制,允许你处理控制器抛出的异常。通过使用 @ControllerAdvice
和 @ExceptionHandler
注解,可以定义全局异常处理器和异常处理方法。
文件上传下载
Spring MVC 支持文件上传和下载。通过使用 MultipartFile
接口和 HttpServletResponse
对象,可以处理文件上传和下载请求。
五、安全框架
认证流程
Spring Security 提供了认证流程,允许你管理用户登录和注销。通过使用 AuthenticationManager
和 UserDetailsService
接口,可以实现自定义的用户认证逻辑。
授权模型
Spring Security 提供了授权模型,允许你控制用户对资源的访问。通过使用 AccessDecisionManager
和 AccessDeniedHandler
接口,可以实现自定义的授权逻辑。
CSRF 防护
Spring Security 提供了 CSRF 防护,防止跨站请求伪造。通过使用 CsrfTokenRepository
和 CsrfFilter
,可以生成和验证 CSRF 令牌。
OAuth2 集成
Spring Security 提供了 OAuth2 集成,允许你使用 OAuth2 协议进行身份验证。通过使用 OAuth2AuthenticationManager
和 OAuth2RequestFactory
,可以实现自定义的 OAuth2 认证逻辑。
方法级安全
Spring Security 允许你为方法定义安全规则。通过使用 @PreAuthorize
和 @PostAuthorize
注解,可以定义方法的安全约束条件。
六、高级特性
事件发布/监听机制
Spring 提供了事件发布/监听机制,允许你发布和监听事件。通过使用 ApplicationEvent
和 ApplicationListener
接口,可以实现自定义的事件和监听器。
SpEL 表达式
Spring 表达式语言(SpEL)允许你以表达式的方式访问对象属性和执行计算。SpEL 支持多种表达式操作,如条件、循环、集合操作等。
响应式编程(WebFlux)
Spring WebFlux 是一个响应式 Web 框架,允许你使用异步和非阻塞的方式处理 HTTP 请求。通过使用 Mono
和 Flux
类,可以实现响应式编程。
测试框架集成
Spring 提供了与各种测试框架的集成,例如 JUnit 和 TestNG。通过使用 @SpringBootTest
和 @DataJpaTest
注解,可以轻松地编写集成测试和单元测试。
缓存抽象
Spring 提供了缓存抽象,允许你配置和使用缓存。通过使用 CacheManager
和 Cache
接口,可以实现自定义的缓存逻辑。
七、Spring Boot 生态
自动配置原理
Spring Boot 使用自动配置来简化应用程序的配置。通过分析类路径下的类和属性,Spring Boot 可以自动配置 Spring 应用程序所需的 Bean 和依赖。
Starter 机制
Spring Boot Starter 机制简化了依赖管理。通过使用 Starter POM,可以轻松地添加所需的依赖和配置。
Actuator 监控
Spring Boot Actuator 提供了应用程序监控功能。通过使用 /actuator/health
端点,可以检查应用程序的健康状态。
配置文件体系
Spring Boot 使用配置文件来管理应用程序配置。通过使用 application.properties
或 application.yml
文件,可以配置应用程序的属性和配置项。
📥博主的人生感悟和目标

- 💂 博客主页: Java程序员廖志伟希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号:
SeniorRD

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!
🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~