Spring框架提供了大概20个模块,分类为:Core Container, Data Access/Integration, Web, AOP (Aspect Oriented Programming)Instrumentation, Messaging, and Test
 
1、Core Container包含:spring-core, spring-beans, spring-context, spring-context-support, and spring-expression 模块。
①spring-core, spring-beans是Spring框架的基础,提供了IoC和DI功能。spring-beans中的BeanFactory是工厂模式的实现。
 
②spring-context模块基于spring-core、spring-beans,是一种框架式访问对象的方法,类似JNDI注册方式。
还添加了国际化支持、事件传播支持、资源加载支持、上下文的创建支持等等。还有JavaEE的部分功能。
ApplicationContext接口是该模块的核心。
 
③spring-context-support模块则提供了集成通用第三方库的支持,将其集成到Spring应用上下文中,如缓存、邮件、计划、模板引擎。
 
④spring-expression模块提供了可在运行时查询和操作对象图的表达式语言,很强大。是对JSP中unified EL的扩展。
支持:设置/获取属性值,属性分配,方法调用,访问数组、集合及索引的内容,逻辑和数字运算符,命名变量,通过名字在Spring IoC容器中获取对象。
 
2、AOP and Instrumentation包含:
①spring-aop模块提供了AOP编程,允许定义方法拦截器和切入点,以与具体的功能代码解耦合。
②spring-aspects模块集成了AspectJ。
③spring-instrument模块,提供了类工具支持和类加载器实现,用于特定的应用服务器。
④spring-instrument-tomcat模块,包含了对tomcat的代理。
 
3、Messaging
Spring Framework 4 包含了spring-messaging模块,带有Spring Integration项目的关键抽象,如Message、MessageChannel、MessageHandler以及其他,以作为基于消息的应用的基础。 
也提供了一些注解,可以将消息发送到方法中。
 
4、Data Access/Integration,包含JDBC、ORM、OXM、JMS和Transaction模块。
①spring-jdbc模块,提供了JDBC抽象层,免除了繁杂的JDBC编码和不同数据库开发商错误代码的分析。
②spring-tx模块,允许代码式和声明书事务管理。(需要实现特定接口,支持所有POJO??)
③spring-orm模块,提供了对常见ORM的集成层,常见ORM包括JPA、JDO和Hibernate。通过使用该模块,你既可以使用ORM的功能,也可以使用Spring提供的功能,例如简单的声明式事务管理。
④spring-oxm模块,提供了抽象层,支持Object/XML映射实现 如JAXB、Castor、XMLBeans、JiBX和XStream。
⑤spring-jms模块,包含了生产和消费消息功能,集成了spring-messaging模块。
 
5、Web,包含spring-web, spring-webmvc, spring-websocket, and springwebmvc-portlet模块。
①spring-web模块,提供了基本的web功能,如文件上传、使用Servlet Listeners初始化IoC容器、web容器。同样包含了一个HTTP客户端和Spring远程支持的web部分。
②spring-webmvc模块,包含了MVC和REST Web Service实现。
③spring-webmvc-portlet模块,提供了用于Portlet环境的MVC实现,镜像了spring-webmvc模块的功能。
 
6、Test
spring-test模块,支持Spring组件的单元测试和集成测试,使用JUnit或者TestUG。提供了Spring ApplicationContext的加载及缓存。还提供了mock对象!
 
技巧
通过使用Spring BOM,在 dependencyManagement 导入spring-framework-bom ,然后就可以保证所有的Spring依赖都是同一个版本 -- 可以不用再声明版本了。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.3.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependencies>
 
Logging,这是Spring唯一强转要求的外部依赖,JCL。
关掉JCL:从spring-core模块中排除依赖。或者,选一个依赖取代JCL。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.3.RELEASE</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>

至此,已经破坏了应用(不能运行了),所以还需要修复一下。使用JCL的其他实现例如SLF4J。

SLF4J,是编译时绑定,而不是运行时判断,所以更干净。(应该是指在编译时就判断是否需要相应的代码,不需要就去掉)
但是,有一些容器内置了JCL的实现,这时单纯的排除依赖是不够的。这时候最好的办法是反转类加载器层次,让应用控制JCL依赖,而非容器控制。(如IBM的WebSphere Application Server。知道就行,略过。)
 
 
4.0 版本的改进(摘录):
  1. 注入bean时,支持泛型限定。如 @Autowired Repository<Customer> customerRepository  。
  2. CGLIB-based proxy classes 不再需要一个默认构造器。
  3. 新的 @RestController 注解。
4.1 版本的改进(摘录):
  1. 用Jackson支持JSONP。
  2. 新的lifecycle,允许拦截 @ResponseBody@ResponseEntity 方法,在controller返回之后,但写入响应之前。
  3. 新的HttpMessageConverter选项:通过 jackson-dataformat-xml扩展开启基于Jackson的XML序列化支持。如果存在 jackson-dataformat-xml,将取代 JAXB2。
4.2 版本的改进(摘录):
  1. 可以使用Java 8的默认方法来编写配置文件,@Bean 默认方法。
  2. @Import 支持导入常规类作为bean,而不仅仅是配置类了。
  3. 内建的CORs支持,包含全局的(MVC Java config和 XML namespace)和局部的(如@CrossOrigin)配置。
  4. 默认的JSON前缀,由 "{} && " 改成更安全的 ")]}', " 。
4.3 版本的改进(摘录):
  1. Java 8 的默认方法可以用作bean属性的GETTER/SETTER。
  2. 如果目标bean只定义了一个构造方法,就不再需要@Autowired 注解了。
  3. 内建了对 HTTP HEAD and HTTP OPTIONS 的支持。
  4. @RequestMapping 新的组合注解:@GetMapping@PostMapping@PutMapping@DeleteMapping, and @PatchMapping

  5. 新的组合注解:@RequestScope, @SessionScope, and @ApplicationScope

  6. 新的 @RestControllerAdvice 注解。

  7. 新的 @SessionAttribute 和 @RequestAttribute 注解。

  8. @

    ModelAttribute allows preventing data binding via binding=false attribute (see reference).

  9. @

    PathVariable may be declared as optional (for use on @ModelAttribute methods).

  10. HTTP消息转换器中一致的charset处理,包括multipart文本内容默认的UTF-8编码。

  11. 静态资源处理使用配置好的ContentNegotiationManager ,来决定媒体类型。

 
 
 
 
 
 
 
 

Spring Framework 官方文档学习(一)介绍的更多相关文章

  1. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)

    题外话:本篇是对之前那篇的重排版.并拆分成两篇,免得没了看的兴趣. 前言 在Spring Framework官方文档中,这三者是放到一起讲的,但没有解释为什么放到一起.大概是默认了读者都是有相关经验的 ...

  2. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(二)

    接前一篇 Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 本篇主要内容:Spring Type Conver ...

  3. Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion

    本篇太乱,请移步: Spring Framework 官方文档学习(四)之Validation.Data Binding.Type Conversion(一) 写了删删了写,反复几次,对自己的描述很不 ...

  4. Spring Framework 官方文档学习(二)之IoC容器与bean lifecycle

    到目前为止,已经看了一百页.再次感慨下,如果想使用Spring,那可以看视频或者找例子,但如果想深入理解Spring,最好还是看官方文档. 原计划是把一些基本接口的功能.层次以及彼此的关系罗列一下.同 ...

  5. Spring Framework 官方文档学习(三)之Resource

    起因 标准JDK中使用 java.net.URL 来处理资源,但有很多不足,例如不能限定classpath,不能限定 ServletContext 路径. 所以,Spring提供了 Resource ...

  6. Spring 4 官方文档学习(十二)View技术

    关键词:view technology.template.template engine.markup.内容较多,按需查用即可. 介绍 Thymeleaf Groovy Markup Template ...

  7. Spring 4 官方文档学习(十一)Web MVC 框架

    介绍Spring Web MVC 框架 Spring Web MVC的特性 其他MVC实现的可插拔性 DispatcherServlet 在WebApplicationContext中的特殊的bean ...

  8. Spring Boot 官方文档学习(一)入门及使用

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

  9. Spring boot官方文档学习(一)

    个人说明:本文内容都是从为知笔记上复制过来的,样式难免走样,以后再修改吧.另外,本文可以看作官方文档的选择性的翻译(大部分),以及个人使用经验及问题. 其他说明:如果对Spring Boot没有概念, ...

随机推荐

  1. LoadRunner录制:事务

    背景 LoadRunner 会对事务的性能指标进行记录. 添加事务也是为了在测试的时候统计这段脚本运行时用的时间等等,方便定位性能瓶颈. 一个事务可以包含一个请求,也可以包含多个请求.一般把完成一件事 ...

  2. 转换和删除重复命令tr

    前几篇文章介绍了几个用于处理字符的命令和工具,然而在处理大小写转换.删除重复字符等任务时,这些命令处理起来相对较为麻烦.这里将简单介绍Linux下自带的tr命令,相对于其他命令而言,其语法较为简单,比 ...

  3. UVA 10652 Board Wrapping 计算几何

    多边形凸包.. .. Board Wrapping Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu ...

  4. Spring @Autowired、@Resource、@Required、@Component、@Repository、@Service、@Controller注解的用法和作用

    Spring @Autowired,@Resource,@Required注解的用法和作用 Spring中 @Autowired标签与 @Resource标签 的区别 Spring注解@Compone ...

  5. mysql和redis之间互相备份

    http://code.google.com/p/redisql/wiki/Examples 项目地址:https://github.com/JakSprats/predis/blob/master/ ...

  6. TensorFlow 安装 Ubuntu14.04

    1.Install pip (or pip3 for python3) if it is not already installed: # Ubuntu/Linux 64-bit $ sudo apt ...

  7. ASP.NET Web API 控制器执行过程

    http://www.cnblogs.com/jin-yuan/p/3952605.html

  8. Redis(十七):批量操作Pipeline

    大多数情况下,我们都会通过请求-相应机制去操作redis.只用这种模式的一般的步骤是,先获得jedis实例,然后通过jedis的get/put方法与redis交互.由于redis是单线程的,下一次请求 ...

  9. AngularJS 常用模块书写建议

    本文是依据 Angular Style Guide 对 Angular 常用模块书写建议的翻译和总结,仅供参考. IIFE 使用 立即执行函数表达式(Immediately Invoked Funct ...

  10. atitit.orm的缺点与orm框架市场占有率,选型attilax总结

    atitit.orm的缺点与orm框架市场占有率,选型attilax总结 1. attilax的orm框架要求 1 2. orm框架市场占有率 2 3. spring jdbc templt 3 4. ...