spring学习笔记--概述&体系结构
概述:
Spring是最受欢迎的企业级java应用程序开发框架。
优点:创建性能好、易于测试、可重用代码。轻量级的框架,基础版本只有2MB左右的大小。
好处:Spring可以使开发人员使用POJOs开发企业级的应用程序。只使用POJOs的好处是你不需要一个EJB容器产品,比如一个应用程序服务器,比如Tomcat。
Spring在一个单元模式中是有组织的。即使包和类的数量非常大,你只要担心你是需要的,其他的可以忽略。
Spring不会让你白费力气重复工作。它真正的利用了一些现有的技术,比如:ORM框架、日志框架、JEE、Quartz和JDK计时器,其他试图技术。
依赖注入(DI)
Spring最认同的技术是控制反转的依赖注入模式。控制反转(IOC)是一个通用的概念,它可以用许多不同的方式去表达,依赖注入仅仅是控制反转的一个具体的例子。
依赖注入是什么?例如类A依赖于类B。但是将类B通过IOC的方式注入到类A中。
依赖注入可以以构造函数传递参数的方式发生,或者通过使用setter方法post-construction。依赖注入是Spring框架的核心部分。
当编写一个复杂的Java应用程序时,应用程序类应该尽可能的独立于其他的Java类来增加这些类可重用可能性,当进行单元测试时,也可以使他们独立于其他类进行测试。
面向方面的程序设计(AOP)
Spring框架的一个关键组件是面向方面的程序设计(AOP)框架。一个程序中跨越多个点的功能被称为横切关注点,这些横切关注点在概念上独立于应用程序的业务逻辑。
比如:日志记录、声明性事物、安全性、和缓存等等。
在OOP中模块化的关键单元是类,而在AOP中模块化的关键单元是方面。AOP帮助你将横切面关注点从它们所影响的对象中分离出来,然而依赖注入帮助你将你的应用程序对象从彼此中分离出来。
核心容器
核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression等模块组成,它们的细节如下:
spring-core模块提供了框架的基本组成部门,包括IOC和依赖注入功能。
spring-beans模块提供BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。
context模块建立在core和beans模块的基础上建立起来的,它以一种类似于JNDI注册的方式访问。Context模块继承于Bean模块,并且添加了国际化、事件传播、资源加载和透明的创建上下文等功能。
ApplicationContext接口是Context模块的焦点。spring-context-support提供了对第三方库集成到Spring上下文的支持,例如:缓存(EhCache、Guava、JCache)、邮件、调度、模块引擎等。
spring-expression模块提供了强大的表达式语言,用于在运行时查询和操作对象图。支持get和set属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从Spring IOC容器检索对象,还支持列表的投影,选择以及聚合等。
数据访问/集成
数据访问/集成层包括JDBC,ORM,OXM,JMS和事务处理模块,它们的细节如下:
JDBC模块提供了JDBC抽象层,它消除了冗长的JDBC编码和对数据库供应商特定错误代码的解析。
ORM模块提供了流行的对象关系映射API的集成,包括JPA、JDO和Hibernate等。通过此模块可以让这些ORM框架和spring的其他功能整合,例如:事物管理。
OXM模块提供了对OXM实现的支持,比如JAXB、Castor、XMLBeans、JiBX、XStream等。
JMS模块包含生产和消费消息的功能。
事物模块为实现特殊接口类及所有的POJO支持编程和声明式事物管理。
web
Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:
Web模块提供面向web的基本功能和面向web的应用上下文,比如多部分(multipart)文件上传功能、使用Servlet监听器初始化IoC容器等。它还包括HTTP客户端以及Spring远程调用中与web相关的部分。
Web-mvc 模块为web应用提供了模型视图控制(MVC)和REST Web服务的实现。Spring的MVC框架可以使领域模型代码和web表单完全地分离,且可以与Spring框架的其它所有功能进行集成。
Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。
Web-Portlet 模块提供了用于Portlet环境的MVC实现,并反映了spring-webmvc模块的功能。