Spring被设计为非侵入式,这意味着你的领域逻辑代码不依赖于框架本身。
本文档是Spring框架功能的引用指南
框架介绍
Spring框架是一个Java平台,其提供了开发Java应用的全面的基础设施支持。Spring负责处理基础设施,因此你可以专注于你的应用程序。
Spring能让你使用POJOs来构建应用程序,并以非侵入式地将企业服务应用到这些POJOs上。
依赖注入和控制反转
“The question is, what aspect of control are [they] inverting?”(我们控制的哪些方面是需要反转的?),Martin Fowler在2004年提出了关于控制反转(IoC)的这个问题。他建议重命名这个原则,使之更加不言自明,并想出了依赖注入。
Java应用通常由对象组成,而对象之间又互相依赖着。
虽然Java平台提供了丰富的应用程序开发功能,但它缺少将基础构建块组织成一个有机整体的工具,这项任务就留给了架构师和开发人员。设计模式的最佳实践:一个名字和它能做什么的一个描述,哪里可以应用它,它解决的问题。
控制反转(IoC)组件解决了这一问题,通过提供一种组装不同组件到一个完全可运行的应用程序的正式方式。Spring框架将这些正式的设计模式编写为一系列的对象,你可以集成它们到你的应用程序中。
模块
Spring框架模块被分组为Core Container、Data Access/Integration、Web、AOP (Aspect Oriented Programming)和Test。
Spring框架概述 (3.2.x)
Spring框架概述 (1.2.x)
Core Container (核心容器)
Core Container由Core、Beans、Context和Expression Language模块组成。
Core and Beans模块提供了框架的基础部分,包括IoC容器和依赖注入功能。BeanFactory移除了单例模式编程的需求,并从实际的程序逻辑中解耦配置和依赖关系的设定。
Context模块建立在由Core和Beans模块提供的基础功能之上:这是一种访问对象的方式。Context模块继承了Beans模块的功能,并增加了对国际化、事件传播、资源加载和上下文透明创建的支持。ApplicationContext接口是Context模块的焦点
Expression Language模块提供了一个强大的在运行时查询和操作对象图的表达式语言。语言支持设置和获取属性值、属性赋值、方法调用、从IoC容器按名称检索对象等。
Data Access/Integration (数据访问/集成层)
Data Access/Integration层由JDBC、ORM、OXM、JMS和Transaction模块组成。
JDBC模块提供了JDBC抽象层,不再需要冗长的JDBC编码和数据库厂商特有的错误码解析。
ORM模块提供了对象关系映射APIs的集成层
OXM模块提供了一个支持Object/XML映射实现的抽象层
JMS(Java消息服务)模块包含了生产和消费消息的功能
Transaction模块支持实现特殊接口的类和所有POJOs的程序式和声明式事务管理。
Web
Web层由Web、Web-Servlet、Web-Struts和Web-Portlet模块组成。
Web模块提供了基本的面向web的集成功能
Web-Servlet模块包含web应用的模型-视图-控制器(MVC)实现。MVC框架提供了领域模型代码和web表单之间的完全分离。
AOP and Instrumentation
AOP模块提供了一个AOP联盟兼容的面向切面编程实现,这个实现允许你定义方法拦截器和切点,以便干净地解耦逻辑上应被分开的功能实现代码。
Aspects模块提供了集成AspectJ功能
Instrumentation模块提供了类工具支持和类加载器实现
Test
Test模块支持使用TestNG或JUnit测试Spring的组件
使用场景
前面所述的构件块让Spring框架在许多场景下是一个合适的选择。
典型完整的Spring web应用 (3.2.x)
典型完整的Spring web应用 (1.2.x)
声明式事务管理功能使整个web应用都具有事务性
所有自定义的业务逻辑都可以用简单的POJOs来实现,并由IoC容器管理
独立于web层的校验服务(validation),可以让你选择在哪里执行检验规则
ORM支持iBatis集成
表单控制器使用领域模型来无缝集成web层,不再需要那些能将HTTP参数转换为领域模型属性值的实现类
依赖管理和命名规范
依赖管理和依赖注入是两个不同的东西,这里的依赖通常指文件系统上的物理资源。依赖管理的过程包括定位资源,将其存储,并把它们添加到类路径下。
Spring的依赖和依赖Spring的应用
Spring只有一个强制性的外部依赖,这就是logging
依赖Spring的应用可以通过Maven和Ivy来管理
Logging
日志记录是Spring的一个很重要的依赖。原因有三,a) 唯一强制性的外部依赖,b) 每个人都喜欢看到自己使用的工具输出的一些信息,c) Spring集成了很多其它工具,所有这些工具都有自己的日志依赖。
开发者的目标之一:对整个应用而言,只在一个中心位置配置统一的日志记录。
Spring的日志依赖是Jakarta Commons Logging API (JCL)。
Not Using Commons Logging
不幸的是,commons-logging框架的运行时发现算法是有问题的。首选可能是简单的日志门面框架 Simple Logging Facade for Java (SLF4J)
Using SLF4J
SLF4J是一个干净的依赖关系。它在运行时要比commons-logging框架更高效,因为它使用编译时绑定技术,而非运行时发现技术。这意味着你必须更明确地了解运行时会发生什么,并相应地声明它或配置它。
SLF4J提供了绑定到许多常见的日志框架的jar包,包括common-logging、Log4J和Logback。
玩的开心!^_^