Spring 体系结构
spring 核心特性
依赖注入
依赖注入(Dependency Injection)是一种在软件工程中广泛使用的设计模式,其主要思想是:
-
将对象依赖的其他对象传递进来,而不是在对象内部直接创建依赖的对象。
-
完成依赖对象的注入后,对象对依赖的控制权交给了调用方。
在Java中,依赖注入的实现方式主要有以下几种:
-
构造方法注入:通过构造方法的参数传递依赖对象。
-
Setter方法注入:通过设置setter方法传入依赖对象。
-
接口注入:定义接口让调用方实现接口来注入依赖对象。
-
注解注入:通过注解指示哪些参数需要注入。
依赖注入的主要优点包括:
-
降低了对象之间的耦合度。
-
提高了代码的可测试性和可维护性。
-
提高了各模块的独立性和可重用性。
-
使得代码更加清晰,由调用方主动控制依赖对象的注入。
依赖注入在Spring框架中有着广泛的应用,是Spring实现IoC和控制反转的基础。正确使用依赖注入能够使代码更加健壮与易于维护。
面向切面编程
面向切面编程(Aspect Oriented Programming,缩写AOP)是一种编程范式,用于解决非功能性需求或跨越多个模块的功能性需求。其主要思想是:
-
把复杂系统分解成不同的部分(称为方面Aspect),各部分分别编码实现。
-
在运行时,通过“横切”的方式,动态将不同部分组合起来,以实现完整的功能和逻辑。
AOP的主要作用:
-
将非业务关联逻辑 从业务代码中分离出来,如日志、安全、事务等。
-
提高模块化程度,降低耦合。
-
使系统易于维护和扩展。
AOP实现方式:
-
编译期织入:在编译时,由编译器将Aspect代码插入业务代码中。
-
类加载期织入:在类加载到JVM时,通过特殊处理将Aspect代码织入其中。
-
运行期织入:在程序运行期间,通过反射和代理方式实现代码的织入。
AOP与OOP的对比:
-
OOP采用横向抽象,以类为模块单元,适合实现与业务功能强相关的需求。
-
AOP采用纵向抽象,以切面为模块单元,适合实现与业务功能松耦合的需求。
AOP与OOP可以很好地配合使用,优化软件设计,使系统的可维护性更好。
Spring 体系结构
核心容器
核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表达式语言,Spring Expression Language)等模块组成,它们的细节如下:
- spring-core:
- 定义了Spring框架的基本组成部分,如IoC和DI功能。
- 包含访问配置文件、创建和管理bean等基础部分。
- spring-beans:
- 提供BeanFactory,是Spring IoC容器的基础。
- 定义了Bean对象、属性编辑器、Bean的作用域等概念。
- spring-context:
- 继承BeanFactory,是ApplicationContext的核心实现。
- 添加了对i18n、事件传播、资源加载和透明创建上下文(AOP概念)等的支持。
- spring-context-support:
- 对spring-context的补充,提供集成第三方库的包。
- 包含邮件服务、JNDI定位、任务调度等模块。
- spring-expression:
- 提供Spring Expression Language表达式语言功能。
- 可以在XML或注解中使用SpEL表达式进行依赖注入等。
总结:
- spring-core和spring-beans提供DI和IoC容器基础。
- spring-context建立在其基础上,提供应用级别的功能。
- spring-context-support提供第三方集成支持。
- spring-expression提供表达式语言的评估与处理。
数据访问/集成
Spring的数据访问/集成层主要包含以下模块:
- JDBC模块:
- 提供了JdbcTemplate类,可以方便地处理JDBC代码而无需繁琐的JDBC编码工作。
- 处理了资源的建立和释放,并能将数据库异常转换为unchecked异常。
- ORM模块:
- 支持流行的ORM框架,如Hibernate、JPA等。
- 提供了一致的声明式事务管理。
- 整合了ORM框架的异常体系到Spring的通用DataAccessException异常体系中。
- OXM模块:
- 提供对对象XML映射支持,如JAXB、Castor、XMLBeans、JiBX、XStream等。
- 使得XML可以与Java对象间进行bidirectional转换。
- JMS模块:
- 包含生产和消费信息等功能。
- 大大减少了使用JMS API的代码量。
- 事务管理模块:
- 对事务管理提供一致的编程模型。
- 支持声明式事务管理。
- 支持编程式和声明式事务管理的统一抽象。
综上,通过这些模块,Spring大大简化了数据库和其他系统间的集成过程,为访问和操作数据提供了便捷与支持。
web
Spring的Web层主要包含以下模块:
- Web模块:
- 提供基本的Web开发集成特性,如文件上传和基于Servlet监听器的IoC容器初始化。
- 集成Servlet API和JSP,可以使用Spring的中间层实现Web应用。
- Web MVC模块:
- 也称Spring MVC,是Spring自己的Web框架。
- 基于模型-视图-控制器(MVC)设计模式,灵活且强大。
- 包含REST Web服务、数据验证、格式化、本地化等功能。
- Web Socket模块:
- 提供对WebSocket协议的完整支持。
- 可对WebSocket会话进行STOMP消息传输、管理。
- 支持SockJS模拟WebSocket环境。
- Web Portlet模块:
- 提供在Portlet环境中使用MVC实现的组件。
- 包括Portlet API和Portlet MVC框架适配器。
- 支持Portlet应用在各种Portlet容器中运行。
总结:
- Web模块提供基础Web集成支持。
- Web MVC模块提供了Spring的MVC框架。
- Web Socket模块用于WebSocket开发。
- Web Portlet模块在Portlet环境使用Spring MVC。
这些模块为Web应用提供了完整和全面的支持。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)