概述
- 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。
- Spring 框架是一个开源的 Java 平台,它最初是由 Rod Johnson 编写的,并且于 2003 年 6 月首次在 Apache 2.0 许可下发布。
- Spring 是轻量级的框架,支持功能定制,意味着可以选择框架中的某些功能模块。
- Spring 框架的核心特性是可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。
- Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践。
Spring 框架给项目带来的好处
- Spring 的核心宗旨:简化企业级应用开发,同时给复杂问题提供强大的、非侵入性解决方案。
- 动态解藕,方便开发,面向接口设计。通过 Spring 提供的容器,我们可以将对象之间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。
- 方便程序的测试。Spring 框架也提供了测试模块,可以和很多主流的测试框架相结合。
- 降低 Java EE API 的使用难度。Spring 对很多难用的 Java EE API(如JDBC,JavaMail,远程调用等)提供了一个简单的封装层,通过 Spring 的简易封装,这些Java EE API的使用难度大为降低。
- 方便集成各种优秀框架。Spring 不排斥各种优秀的开源框架,相反,Spring 可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts、Hibernate、Hessian、Quartz)等的直接支持。
- AOP编程的支持。通过 Spring 提供的 AOP 功能,方便进行面向切面的编程。
- 声明式事务的支持。在 Spring 中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
- Spring 是一个模块化的项目,可以根据自己的需要定制功能模块。
Spring 的核心功能模块
- Spring Core(Spring 的核心容器)
核心容器提供 Spring 框架的基本功能 Spring 以 bean 的方式组织和管理 Java 应用中的各个组件及其关系 Spring 使用 BeanFactory 来产生和管理Bean,它是工厂模式的实现 BeanFactory 使用控制反转(IOC)模式将应用的配置和依赖性规范与实际的应用程序代码分开 BeanFactory 使用依赖注入的方式提供给组件依赖。 - Spring Context(Spring 的上下文)
Spring 上下文向 Spring 框架提供上下文信息 Spring 上下文包括各种信息和功能服务,如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 - Spring Web
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文Web层中使用的 Web 框架可以是 Spring 自己的 MVC 框架,或者是其他的 Web 框架,如Struts、Webwork等。 - Spring DAO
一般三层架构中的 DAO,主要目的是将持久层相关问题与一般的的业务规则隔离开 Spring 中的 DAO 模块提供了一致的方式访问数据库,不管采用何种持久化技术,Spring 都提供一致的编程模型。 - Spring ORM
Spring 与所有的主要的 ORM 映射框架都集成的很好,包括 Hibernate、MyBatis 等 Spring 为所有的这些框架提供了类似于模板的辅助类,达成一致的编程风格。 - Spring AOP(面向切面编程)
Spring AOP 模块将面向切面编程的功能集成到了 Spring 框架中所以,可以很容易的让 Spring 框架管理的对象都能支持 AOP 功能。 - Spring MVC(Spring WebMVC)
MVC 框架是一个全功能的构建 WEB 应用程序的 MVC 实现通过策略接口,MVC 框架变成为高度可配置的 Spring 的 MVC 框架提供清晰的角色划分:控制器、验证器、命令对象、表单对象和模型对象、分发器、处理器映射和视图解析器 。
Spring 的 IoC
IoC(Inversion of Control),控制反转。Spring 核心容器也可以称为 IoC 容器,该容器主要负责管理各种对象的声明周期(对象的创建、初始化、销毁等)。IoC 容器并没有实现更多的功能,但它的存在使我们不需要很多代码、不需要考虑对象间复杂的耦合关系就能从 IoC 容器中获取合适的对象,而且提供了各种对象的可靠的管理,极大地降低了开发的复杂性,代码之间的耦合性。
简单解释:控制反转,即创建对象的权限被控制了,反转给了 IOC 容器。
Spring 中的 AOP
AOP(Aspect Oriented Programming),意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
简单解释:要理解切面编程,就需要先理解什么是切面。用刀把一个西瓜分成两瓣,切开的切口就是切面。Web 层级设计中,Web 层->网关层->服务层->数据层,每一层之间也是一个切面。编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。