阅读更多
1 Overview
2 Core Container
核心容器(Core Container)由spring-core
、spring-beans
、spring-context
、spring-context-support
、spring-expression
5个模块构成
其中,spring-core
和spring-beans
模块是Spring框架的基本部分,提供了IoC
以及依赖注入
等核心功能,BeanFactory采用了工厂模式,消除了应用对编程式单例的需求,同时,将对象创建与依赖注入进行解耦
spring-context
模块建立在spring-core
和spring-beans
模块构成的坚实基础之上,它提供了一种框架式的对象访问方式(例如JNDI registry)。spring-context
模块继承了spring-beans
模块的种种特性,同时,并增加了对国际化(internationalization,例如使用资源包),事件传播(event propagation),资源加载(resource loading)以及上下文透明创建(例如Servlet容器)的支持。ApplicationContext
接口是spring-context
模块的核心。此外,spring-context-support
模块提供了集成其他三方库到Spring应用上下文的能力,例如EhCache,Guava,JCache,邮件(JavaMail),调度(CommonJ,Quartz)和模板引擎(FreeMarker,JasperReports,Velocity)等等
spring-expression
模块提供了一种在运行时查询以及操作对象图的表达式语言(Expression language)。它是JSP 2.1规范中规定的统一表达式语言(unified EL)的扩展。该语言支持属性值的存取(getter/setter)、方法调用、数组访问、收集和索引、逻辑和算数运算符、命名变量、从Spring的IoC容器中检索对象
2.1 Dependency
2.1.1 spring-core
1 | spring-core |
2.1.2 spring-beans
1 | spring-beans |
2.1.3 spring-expression
1 | spring-expression |
2.1.4 spring-context
1 | spring-context |
2.1.5 spring-context-support
1 | spring-context-support |
3 AOP and Instrumentation
spring-aop
模块提供了一种兼容AOP联盟面向切面编程接口的实现,它允许我们定义方法拦截器(MethodInterceptor)以及切点(Pointcut)来解耦本应该进行功能拆分的业务代码。使用源码级(source-level)元数据功能,我们还可以将一些行为整合到代码中(Aspectj,我估计用的是JSR-269插入式注解API)
spring-aspects
模块整合了AspectJ
The spring-instrument module provides class instrumentation support and classloader implementations to be used in certain application servers(不会翻译,嘻嘻)
spring-instrument-tomcat
模块包含了Tomcat的Spring工具代理
3.1 Dependency
3.1.1 spring-aspects
1 | spring-aspects |
3.1.2 spring-aop
1 | spring-aop |
3.1.3 spring-instrument-tomcat
1 | spring-instrument-tomcat |
4 Messaging
Spring 4.x 新增了spring-messaging
模块,在Spring的集成项目中抽象出了消息模块(例如Message、MessageChannel、MessageHandler等)作为基于消息传递的应用程序的基础。该模块还包含了一组用于将消息映射到方法的注解,类似于基于Spring MVC注解的编程模式
4.1 Dependency
4.1.1 spring-messaging
1 | spring-messaging |
5 Data Access/Integration
Data Access/Integration层由JDBC、ORM、OXM、JMS以及Transaction模块构成
spring-jdbc
模块提供了一个JDBC层的抽象,让我们从单调乏味的JDBC编码以及解析数据库供应商特定的错误代码中解放出来
spring-tx
模块支持对POJO(Plain Old Java Object)的编程式以及声明式事务管理
spring-orm
模块为流行的ORM(object-relational mapping)API的集成层,包括JPA、JDO以及Hibernate。利用spring-orm
模块,我们可以将这些ORM框架与Spring提供的其他所有功能结合使用,例如声明式事务管理
spring-oxm
模块为流行的OXM(object-xml mapping)框架提供一个抽象层,例如JAXB,Castor,XMLBeans,JiBX以及XStream
spring-jms
模块(Java Messaging Service)提供了生产和消费消息的机制,在Spring 4.1之后,它集成了spring-messaging
模块
5.1 Dependency
5.1.1 spring-tx
1 | spring-tx |
5.1.2 spring-jdbc
1 | spring-jdbc |
5.1.3 spring-orm
1 | spring-orm |
5.1.4 spring-oxm
1 | spring-oxm |
5.1.5 spring-jms
1 | spring-jms |
6 Web
Web层由spring-web
、spring-webmvc
、spring-websocket
、spring-webmvc-portlet
模块构成
spring-web
模块提供了基本的面向Web的集成功能,例如使用Servlet监听器(listener)对IoC容器进行初始化以及面向Web的应用程序上下文。它还包含了一个HTTP客户端和Spring远程处理支持的Web相关部分
spring-webmvc
模块包含了Spring MVC模型以及Restful Web Service的实现。Spring的MVC框架提供了域模型代码和Web表单之间的清晰分离,并且与Spring框架的所有其他功能集成在一起
spring-webmvc-portlet
模块(也称为Web-Portlet模块)提供了在Portlet环境中使用的MVC实现,并镜像实现了基于Servlet的spring-webmvc模块的功能
6.1 Dependency
6.1.1 spring-web
1 | spring-web |
6.1.2 spring-webmvc
1 | spring-webmvc |
6.1.3 spring-websocket
1 | spring-websocket |
6.1.4 spring-webmvc-portlet
1 | spring-webmvc-portlet |
7 Test
spring-test
模块支持使用JUnit或TestNG框架对Spring组件进行单元测试和集成测试。它提供了一致的Spring ApplicationContexts加载和缓存这些上下文。它还提供了Mock对象,以隔离的方式测试代码
7.1 Dependency
7.1.1 spring-test
1 | spring-test |