Spring 是一个开源的轻量级企业级应用开发框架,于 2002 年发布第一个版本。它是一个全栈的框架,提供了一系列的模块,支持从 Web 应用到数据库访问等各种方面的开发,特别是在企业级应用开发领域广泛应用。
框架分层
SUN提供的EE的三层结构:web层、业务层、数据访问层(持久层/集成层)
web层:Spring MVC Struts2/Spring MVC是web层基于MVC设计模式框架
持久层:JDBC Template Hibernate是持久层的一个ORM的框架
业务层:Spring的Bean管理
运行原理
Spring是一种通过JavaBean配置应用程序的方法。我们不需要通过new关键词创建对象,而是在配置文件中配置JavaBean。当对象与对象之间有依赖关系的时候,我们也只需要在配置文件中把依赖关系体现出来,这些被配置的Bean将会纳入Spring管理,放置于Spring容器中。我们只需要写很少量的代码便可得到Spring容器,并且从Spring容器中得到配置的JavaBean。这种解决依赖性的方法即控制反转 (IOC,即Inversion of Control)或者依赖注入(Dependency Injection),从技术上来说,即使用某种容器组织相互依赖的对象。除了IOC之外,Spring还可以将分散在系统的公共代码统一组织起来,在运行的时候加入到系统中,这就是AOP(面向切面编程)。
核心容器
核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring 上下文
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP
通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO
JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORM
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
Spring Web 模块
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC 框架
MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
框架核心
控制反转
当我们调用一个方法或者类时,不再有我们主动去创建这个类的对象,控制权交给别人(spring)。
依赖注入
spring主动创建被调用类的对象,然后把这个对象注入到我们自己的类中,使得我们可以使用它。
不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务,Spring框架中是IOC容器负责将这些联系在一起。
框架优点
1. 方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
2. AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
3. 声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
4. 方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
5. 方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
6. 降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
总的来说,Spring 框架的目标是简化开发过程,提高开发效率,它提供了很多模块,可以根据项目需要选择相应的模块进行开发。并且 Spring 框架的设计理念也影响了很多其它的框架,如 Spring Boot、Spring Cloud 等,这些框架都是建立在 Spring 的基础上,共同构建了 Java 生态圈的发展。