[J2EE]Spring框架的一些笔记

0. 全景图

全景图

本文说明的Spring Framework版本:4.3.25.RELEASE

Spring框架由20个模块组成,这些模块被分成组,分别为:

  • 核心容器(Core Container)
  • AOP(Aspect Oriented Programming)
  • Instrumentation
  • 消息(Messaging)
  • 数据访问/集成(Data Access/Integration)
  • 网站(Web)
  • 测试(Test)

1. 核心容器(Core Container)

由以下模块组成:

  • spring-core:框架的基础部分,提供IoC/DI能力
  • spring-beans:运用工厂模式实现BeanFactory功能
  • spring-context:基于Core和Beans模块,提供一套对象访问的方法,以及提供一些额外的能力支持,如国际化(internationalization)、事件传递(event propagation)、资源加载(resource loading)、构造容器上下文(Servlet container);同时也支持Java EE的特性,如EJB、JMX以及基础远程调用(basic remoting)
  • spring-context-support:提供普通第三方包的整合支持,如缓存能力(EhCache、Guava、JCache)、邮件能力(JavaMail)、定时服务(CommonJ、QuartZ)以及模版引擎(FreeMarker、JasperReports、Velocity)
  • spring-expression:提供强大的表达式语言能力

2. AOP

  • spring-aop:提供AOP能力
  • spring-aspects:提供AspectJ的集成

3. Instrumentation

  • spring-instrument:提供用于某些应用程序服务器的类级工具和类加载器的实现
  • spring-instrument-tomcat:Spring‘s instrumentation agent for Tomcat

4. Messaging

  • spring-messaging:提供消息协议支持的能力,包括Message,MessageChannel,MessageHandler

5. Data Access/Integration

由JDBC、ORM、OXM、JMS和Transaction模块组成

  • spring-jdbc:提供一个JDBC操作的抽象层,减少JDBC操作代码以及解析不同数据库厂商的错误代码
  • spring-tx:提供事务管理的能力
  • spring-orm:提供一些orm框架的支持,如JPA、JDO、Hibernate
  • spring-oxm:提供一些xml对象映射框架(oxm)的支持,如JAXB、Castor、XMLBeans、JiBX、XStream
  • spring-jms:提供Java消息服务的支持,在Spring 4.1之后,该模块已经集成到spring-messaging模块中去了

6. Web(网站)

由spring-web、spirng-webmvc、spring-websocket和spring-webmvc-portlet组成

  • spring-web:提供web应用需要的基础能力,如多文件上传、使用Servlet监听器初始化IoC上下文容器
  • spring-webmvc:大名鼎鼎的springmvc框架
  • spring-websocket:提供和websocket相关的能力
  • spring-webmvc-portlet

7. Test(测试)

  • spring-test:提供单元测试和集成测试相关能力(JUnit或TestNG)

8. 唯一硬性外部依赖

spring一直保持最小化的外部依赖,唯一硬性的外部依赖就是Logging了,不额外引入的话就使用JDK中的java.util.logging来打印日志了。

spring-core中依赖了common-logging,这个只是一个日志门面,没有具体实现,可以引入Log4j、LogBack等日志实现框架。其中Log4j1.2版本已经进入EOL阶段了,Log4j2.3版本也兼容到最高java6版本,所以现在推荐使用Log4j2.4以上的版本。

当然,如果不想用JCL日志门面,也可以换成SLF4j,不过要做日志的桥接,而且把spring-core中common-logging依赖exclude掉。这时用LogBack就最舒服了,因为LogBack就是按照SLF4j的接口进行实现的,所以不存在桥接的问题。

(•̀ᴗ•́)و ̑̑

Share