初学spring,想慢慢的把自己对spring的学习理解记录下来,当然因为是初学,在记录的过程中会参照各位大牛的理解思路,因为在前辈们的理解中菜鸟才能更快的进步。
一、什么是Spring:
百度一下会发现一致的概念是:Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。、但是发现看完这句话并不能体会到spring的强大,没事先上图看一下spring长啥样
这是spring的结构图,然而直到他长啥样了现在貌似并不怎么认识他,没事,接下就一点一点认识spring的各个组成部分
二、spring核心架构体系(此处参照:http://www.cnblogs.com/wxisme/p/4751397.html)
由上图我们会看到,spring是由五个部分组成的: Core Container、AOP、Web、Data Access、Test,我想将spring比作一个大家族的大管家,
而这五个部分是大管家的五项能力,没有卓越的能力,大管家又怎么能管理好一个家族呢。接下来我们就看一下大管家到底有啥本领:
1.Core Container------核心容器
1)Core 模块:是框架的最底层的部分,spring也是代码不是吗,肯定也是遵守编程的通用知识的,比如类型转换、资源访问等,也就是大管家也是人嘛,人的基本样子还是有的;
2)Beans模块:是框架基础模块,包括了IOC的依赖注入和反转控制,核心的Bean Factory,大管家需要在家中缺少人手的时候能够协调各处的人手;
3)Context模块:以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java EE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。大管家在家中必须由必要的权利,Context就像大管家拥有管理家中事务的权利一样,能够代表Spring的上下文。
4)EL模块:提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring 容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。显而易见EL是大管家的表达能力
2.AOP、ASpects------面向切面编程
AOP的思想类似于在一个家中具体到某一件事的执行时,大管家要安排这件事哪些人来做,每个人的任务是啥,怎么开始,怎么收尾,整个流程操控一遍。
-
AOP 模块提供了面向方面的编程实现,允许你定义方法拦截器和切入点对代码进行干净地解耦,它实现了应该分离的功能。
-
Aspects 模块提供了与 AspectJ 的集成,这是一个功能强大且成熟的面向切面编程(AOP)框架。
-
Instrumentation 模块在一定的应用服务器中提供了类 instrumentation 的支持和类加载器的实现。
-
Messaging 模块为 STOMP 提供了支持作为在应用程序中 WebSocket 子协议的使用。它也支持一个注解编程模型,它是为了选路和处理来自 WebSocket 客户端的 STOMP 信息
3.Data Access数据访问/集成
-
Transactions事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。
-
JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
-
ORM模块:提供与流行的“对象-关系”映射框架的无缝集成,包括Hibernate、JPA、MyBatis等。而且可以使用Spring事务管理,无需额外控制事务。
-
OXM模块:提供了一个对Object/XML映射实现,将java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。
-
JMS模块:用于JMS(Java Messaging Service),提供一套 “消息生产者、消息消费者”模板用于更加简单的使用JMS,JMS用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
4.WEB
Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成,它们的细节如下:
-
Web 模块提供了基本的面向 web 的集成功能,例如多个文件上传的功能和使用 servlet 监听器和面向 web 应用程序的上下文来初始化 IoC 容器。
-
Web-MVC 模块包含 Spring 的模型-视图-控制器(MVC),实现了 web 应用程序。
-
Web-Socket 模块为 WebSocket-based 提供了支持,而且在 web 应用程序中提供了客户端和服务器端之间通信的两种方式。
- Web-Portlet 模块提供了在 portlet 环境中实现 MVC,并且反映了 Web-Servlet 模块的功能。
5.Test
测试模块支持对具有 JUnit 或 TestNG 框架的 Spring 组件的测试。
三、这样我们就了解了spring的具体是什么:
1).Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。
2).Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
3)、在传统应用程序当中,我们如何来完成数据库事务管理?需要一系列“获取连接,执行SQL,提交或回滚事务,关闭连接”,而且还要保证在最后一定要关闭连接,多么可怕的事情,而且也很无聊;如果采用Spring,我们只需获取连接,执行SQL,其他的都交给Spring来管理了,简单吧。所以,Spring能非常简单的帮我们管理数据库事务。
4)、Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。
5)、Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
6)、Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。