Spring FrameWork学习笔记(一)Spring框架综述

 Spring框架为你开发企业级应用提供了一个轻量级的一站式解决方案。Spring是模块化的工具,允许你在不加入其他组件的情况下使用其中一个组件。你可以在任何web框架上使用IOC容器,你也可以只使用Hibernate集成模块或JDBC抽象层。Spring框架支持声明式的事务管理,支持通过RMI(Remote Method Invocation)或web service远程访问你的程序逻辑,支持通过各种方式持久化你的数据。Spring提供了一个完整功能的MVC框架,并且允许你在程序中集成AOP组件。
Spring的设计目标是无侵入性,那就意味着你的逻辑代码通常不需要依赖框架本身。在你的程序中(例如数据访问层),一些对数据层的访问依赖了Spring的库。然而,应该很容易将这种依赖从你的其他代码中分离开来。

1.Spring入门

 如果你刚刚开始学习Spring,你可能需要通过建立一个Spring Boot的基本应用为起点开始使用Spring框架。Spring Boot提供了一个快捷的方式来建立一个基于Spring的应用。他是基于Spring框架的,按照约定优于配置的准则,旨在让你快速启动和运行。

 你可以使用start.spring.io来生成一个基本的项目,或者按照入门指南中的一个教程比如开始创建一个REST风格的WebService程序。为了方便理解,这些教程都是任务驱动的,并且大部分都是基于Spring Boot的。他们也涵盖了你在处理某些特殊问题时会可能会使用到的Spring的其他组件部分。

2.Spring框架的介绍

 Spring作为一个Java平台为你开发应用提供了各种各样的基础控件。Spring解决了基础架构部分以便让你可以专注于你的应用开发。
Spring允许你通过POJO(plain old Java objects)构建应用程序,,并将企业服务非侵入性地应用于POJO。此功能适用于Java SE编程模型和完整和部分Java EE。

Spring平台为开发者提供了以下便利:

  • 无需使用事务方面的API便能让你的Java方法可以在数据库事务中执行
  • 无需使用远程API便能使得你本地的方法可以进行远程处理
  • 无需使用JMX的API便能使得你的本地方法可以进行管理操作
  • 无需使用JMS的API便能使得你的本地方法可以使用消息服务

2.1 依赖注入和反转控制DI&IOC(Dependency Injection and Inversion of Control)

 Java应用程序 - 一个宽松的术语,其运行范围从受限的嵌入式应用程序到多层结构的企业级应用,服务器端企业应用程序 - 通常由协作形成应用程序的对象组成。 因此,在一个应用程序中的对象具有关于彼此的依赖性。

 尽管java平台提供了一套健全的应用开发平台,但是也缺乏将基础控件组合成整体的方法,并且将其留给了设计和开发人员。尽管你可以使用设计模式例如工厂、抽象工厂、builder、装饰器和service locator来将不同class和object组合起来构建你的应用。这些模式很简单,好的设计模式说明了其作用、在什么情况下使用、其能解决的问题等等。这些模式必须你自己在应用中手动实现。

 Spring框架控制反转(IoC)组件通过提供一种形式化的手段将不同的组件组成一个完全可用的应用程序来解决这个问题。 Spring框架将形式化的设计模式编译为可以集成到自己的应用程序中的第一类对象。 许多组织和机构以这种方式使用Spring框架来设计强大的,可维护的应用程序。

2.2 模块化

 Spring框架由大约20个功能模块组成。 这些模块分为核心容器,数据访问/集成,Web,AOP(面向方面的编程),仪器,消息传递和测试,如下图所示。

这里写图片描述

2.2.1 核心容器Core Container

 核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(Spring Expression Language)模块组成。

 spring-core和spring-beans模块提供了框架的基本部分,包括IoC和依赖注入功能。 BeanFactory是一个复杂的工厂模式的实现。 它消除了编程单例的需要(程序员不必对单例亲力亲为),并允许你从实际的程序逻辑中分离依赖性的配置和规范。

 context(spring-context)模块建立在Core和Beans模块提供的实体基础之上:它是一种以类似于JNDI注册表的框架样式方式访问对象的手段。 Context模块从Beans模块继承其特性,并增加了对国际化(例如使用资源束),事件传播,资源加载以及通过例如Servlet容器的透明创建上下文的支持。 Context模块还支持Java EE功能,如EJB,JMX和基本远程处理。ApplicationContext接口是Context模块的焦点。spring-context-support提供支持将常见的第三方库集成到Spring应用程序上下文中,特别是用于缓存(EhCache,JCache)和调度(CommonJ,Quartz)。

 spring-expression模块提供了一个强大的表达式语言(Expression Language),用于在运行时查询和操作对象图。 它是JSP 2.1规范中规定的统一表达式语言(统一EL)的扩展。 该语言支持设置和获取属性值,属性赋值,方法调用,访问数组的内容,集合和索引器,逻辑和算术运算符,命名变量,以及通过Spring IoC容器中的名称检索对象。 它还支持列表投影和选择以及公共列表聚合。

2.2.2 面向切面编程和设备模块AOP and Instrumentation

 spring-aop模块提供了一个符合AOP Alliance-compliant的面向方面的编程实现,允许你定义例如方法拦截器和切入点来干净地解耦实现应该分离的功能的代码。 使用源代码级元数据功能,你还可以以类似于.NET属性的方式将行为信息合并到代码中。

 spring-aspects模块提供了与AspectJ的集成。

 spring-instrument-tomcat 模块提供类仪器支持和类加载器实现以在某些应用服务器中使用。 spring-instrument-tomcat模块包含Spring的Tomcat的工具代理。

2.2.3 消息组件Messaging

 Spring Framework 4 包括一个 Spring消息传递模块 ,从 Spring 集成项目中抽象出来,比如 Message, MessageChannel, MessageHandler 及其他用来提供基于消息的基础服务。 用作基于消息传递的应用程序的基础 。 该模块还包括一组用于将消息映射到方法的注解,类似于基于 Spring MVC 注解的编程模型。

2.2.4 数据访问和集成Data Access/Integration

 数据访问/集成层由JDBC,ORM,OXM,JMS和Transaction 模块组成。

 spring-jdbc模块提供了一个JDBC抽象层,消除了对繁琐的JDBC编码和解析数据库供应商特定的错误代码的需要。

 spring-tx模块支持实现特殊接口的类以及所有POJO(普通Java对象)的编程和声明事务管理。

 spring-orm模块为流行的对象关系映射API提供集成层,包括JPA和Hibernate。使用spring-orm模块,你可以使用这些O / R映射框架结合Spring提供的所有其他功能,例如前面提到的简单声明式事务管理功能。

 spring-oxm模块提供了一个支持对象/ XML映射实现的抽象层,例如JAXB,Castor,JiBX和XStream。

 spring-jms模块(Java消息服务)包含用于生成和使用消息的功能。从Spring Framework 4.1开始,它提供了与spring-messaging模块的集成。

2.2.5 Web

 Web层由spring-web,spring-webmvc和spring-websocket模块组成。(注:这里和4的文档比少了spring-webmvc-portlet模块)

 spring-web模块提供基本的面向Web的集成功能,例如多部分文件上传功能和使用Servlet侦听器和面向Web的应用程序上下文来初始化IoC容器。 它还包含一个HTTP客户端和Web的相关部分的Spring的远程支持。

 spring-webmvc模块(也称为Web-Servlet模块)包含用于Web应用程序的Spring的模型视图控制器(MVC)和REST Web服务实现。 Spring的MVC框架提供了domain model(领域模型)代码和Web表单之间的清晰分离,并且集成了Spring Framework 所有的其他功能。

2.2.6 测试Test

 spring-test模块支持使用JUnit或TestNG对Spring组件进行单元测试和集成测试。 它提供了SpringApplicationContexts的一致加载和这些上下文的缓存。 它还提供了 mock objects(模拟对象),你可以使用它来单独测试你的代码。

3.Spring框架目录
这里写图片描述

posted @ 2017-10-16 07:21  会写代码的放羊娃  阅读(1136)  评论(0编辑  收藏  举报