学习Spring的笔记

开发 后端
本文介绍学习Spring的笔记,Spring的核心是个轻量级容器和Spring的特点。

继续与大家分享J2ee部分的学习经验。今天的主题是目前很流行也很好的一个开源框架-Spring.

引用《Spring2.0技术手册》上的一段话:

Spring的核心是个轻量级容器,它是实现IoC容器和非侵入性的框架,并提供AOP概念的实现方式;提供对持久层、事务的支持;提供 MVC Web框架的实现,并对于一些常用的企业服务API提供一致的模型封装,是一个全方位的应用程序框架,除此之外,对于现存的各种框架,Spring也提供了与它们相整合的方案。

接下来笔者先谈谈自己的一些理解吧,Spring框架的发起者之前一本很著名的书名字大概是《J2ee Development without EJB》,他提倡用轻量级的组件代替重量级的EJB.笔者还没有看完那本著作,只阅读了部分章节。其中有一点分析觉得是很有道理的:

EJB里在服务器端有Web Container和EJB Container,从前的观点是各层之间应该在物理上隔离,Web Container处理视图功能、在EJB Container中处理业务逻辑功能、然后也是EBJ Container控制数据库持久化。这样的层次是很清晰,但是一个很严重的问题是Web Container和EJB Container毕竟是两个不同的容器,它们之间要通信就得用的是RMI机制和JNDI服务,同样都在服务端,却物理上隔离,而且每次业务请求都要远程调用,有没有必要呢?看来并非隔离都是好的。

再看看轻量级和重量级的区别,笔者看过很多种说法,觉得最有道理的是轻量级代表是POJO+IoC,重量级的代表是Container+Factory.(EJB2.0是典型的重量级组件的技术)我们尽量使用轻量级的Pojo很好理解,意义就在于兼容性和可适应性,移植不需要改变原来的代码。而Ioc与Factory比起来,Ioc的优点是更大的灵活性,通过配置可以控制很多注入的细节,而Factory模式,行为是相对比较封闭固定的,生产一个对象就必须接受它全部的特点,不管是否需要。其实轻量级和重量级都是相对的概念,使用资源更少、运行负载更小的自然就算轻量。

话题扯远了,因为Spring框架带来了太多可以探讨的地方。比如它的非侵入性:指的是它提供的框架实现可以让程序员编程却感觉不到框架的存在,这样所写的代码并没有和框架绑定在一起,可以随时抽离出来,这也是Spring设计的目标。Spring是***可以做到真正的针对接口编程,处处都是接口,不依赖绑定任何实现类。同时,Spring还设计了自己的事务管理、对象管理和Model2的MVC框架,还封装了其他J2ee的服务在里面,在实现上基本都在使用依赖注入和AOP的思想。由此我们大概可以看到Spring是一个什么概念上的框架,代表了很多优秀思想,值得深入学习。笔者强调,学习并不是框架,而是框架代表的思想,就像我们当初学Struts一样……

Spring MVC

关于IoC和AOP笔者在上篇已经稍微解释过了,这里先通过Spring的MVC框架来给大家探讨一下Spring的特点吧。(毕竟大部分人已经很熟悉Struts了,对比一下吧)

众所周知MVC的核心是控制器。类似Struts中的ActionServlet,Spring里面前端控制器叫做DispatcherServlet. 里面充当Action的组件叫做Controller,返回的视图层对象叫做ModelAndView,提交和返回都可能要经过过滤的组件叫做 Interceptor.

让我们看看一个从请求到返回的流程吧:
1.前台Jsp或Html通过点击submit,将数据装入了request域
2.请求被Interceptor拦截下来,执行preHandler()方法出前置判断
3.请求到达DispathcerServlet
4.DispathcerServlet通过Handler Mapping来决定每个reuqest应该转发给哪个后端控制器Controlle

【编辑推荐】

  1. Spring.NET1.1.2发布
  2. Java的Spring框架概述
  3. 对于Struts和Spring两种MVC框架的比较
  4. Spring创始人:看衰Java EE
  5. 将Flex与Spring集成框架
责任编辑:佚名 来源: 中国IT实验室
相关推荐

2009-06-22 10:41:34

Spring.AOP

2017-03-29 09:08:25

Spring笔记

2021-10-24 11:11:30

Spring开源Java开发

2011-03-08 15:01:08

Proftpd

2009-06-19 13:37:53

Spring JDBC

2011-03-17 16:43:49

2009-07-14 16:08:41

WebWork学习

2010-07-20 10:58:39

Perl脚本

2010-07-09 14:05:56

UML建模

2011-12-05 10:44:38

inodeLinux文件系统

2021-12-20 20:30:48

鸿蒙HarmonyOS应用

2010-03-10 11:54:39

云计算服务

2009-09-08 18:14:12

CCNA学习笔记

2011-08-09 17:21:37

2009-04-12 09:00:08

Symbian诺基亚移动OS

2011-09-09 11:05:56

Widget

2009-04-12 09:02:32

Symbian诺基亚移动OS

2009-08-28 10:48:00

linux操作系统linux学习扫瞄

2011-03-15 16:19:08

iptables

2009-09-08 17:57:54

LINQ to Dat
点赞
收藏

51CTO技术栈公众号