Spring 框架简介
Spring是一个开源框架,框架的主要优势之一就是其分层架构,分层架构允许选择使用其中一个组件,同时为J2EE应用程序开发提供集成的框架。Spring由7个定义良好的模块组成,Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式
核心容器 提供spring框架的基本功能。核心容器的主要组件时BeanFactory,工厂模式的实现,其使用控制反转IOC模式将应用程序的配置和依赖性规范与 实际的应用程序代码分开
Spring上下文 spring上下文是一个配置文件,向spring框架提供上下文信息。spring上下文包括企业服务,例如JNDI EJB 电子邮件 国际化 校验和调度等
Spring AOP 通过配置管理特性,spring AOP模块直接将面向方面的编程功能集成到框架中。该模块为基于spring应用程序中的对象提供了事务管理服务
Spring DAO jdbc dao抽象层提供了有意义的异常层次结构,可用该结构来管理处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理, 降低了需要编写的异常代码数量
Spring ORM 框架插入了若干各ORM框架,提供了ORM的对象关系工具,包括JDO HIBERNATE IBATIS
Spring Web web上下文模块建立在应用程序上下文模块之上,为基于web应用程序提供上下文,该模块还简化了处理
多部分请求一级将请求参数绑定到域对象的工作
Spring MVC 该框架是一个全功能的构建web应用程序的MVC实现,通过策略接口,MVC框架成为高度可配置的,MVC容纳大量视图技术,包括JSP VELOCITY TILES ITEXT POI
IOC和AOP
控制反转模式的基本概念:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务,容器负责将这些联系在一起。 在典型IOC场景中,容器创建了所有对象,并设置必要的属性将它们连接在一起,决定什么时间调用方法
类型 1 | 服务需要实现专门的接口,通过接口,由对象提供这些服务,可以从对象查询依赖性(例如,需要的附加服务) |
---|---|
类型 2 | 通过 JavaBean 的属性(例如 setter 方法)分配依赖性 |
类型 3 | 依赖性以构造函数的形式提供,不以 JavaBean 属性的形式公开 |
面向方面编程
AOP,允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。可将影响多个类的行为封装到可重用的模块中。AOP是IOC的补充,它们运用模块化方式解决复杂问题
IOC容器
Spring设计的核心是org.springframework.beans包,与JavaBean组件一起使用。这个包通常不是由用户直接使用,而是由服务器将其用作多数功能的底层中介。下一个最高抽象是BeanFactory接口,它是工厂模式的实现,允许通过名称创建和检索对象,BeanFactory也可以管理对象之间的关系
BeanFactory支持两个对象模型
单态 提供具有特定名称的对象的共享实例,可以在查询时对其进行检索。Singleton是默认也是最常用的对象模型,对于无状态服务对象很理想
原型 确保每次检索都会创建单独的对象。在每个用户都需要自己的对象时,原型模型最适合
bean工厂的概念时Spring作为IOC容器的基础,IOC将处理事情的责任从应用程序代码转移到框架
BeanFactory接口
BeanFactory是一个接口,可以针对各种底层存储方法实现,最常用的BeanFactory定义是XmlBeanFactory,根据xml文件中定义装入bean
BeanFactory factory = new XMLBeanFactory(new FileInputStream('xxx.xml'));
在xml文件中定义的bean是被消极加载的,在需要bean之前,bean本身不会被初始化。要从BeanFactory检索bean,只需调用getBean()方法,传 入要检索的bean 名称即可 MyBean mybean = (MyBean) factory.getBean("mybean"); 每个bean的定义都可以是POJO或FactoryBean
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?