京山游侠

专注技术,拒绝扯淡
posts - 50, comments - 868, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

SpringSide 3 的进步

Posted on 2008-12-05 18:09 京山游侠 阅读(21383) 评论(33)  编辑  收藏 所属分类: SpringSide开发实战
在SpringSide的官方主页上,写着SpringSide 3 中包含的主流组件:Spring 2.5 + Hibernate 3 + Struts 2 + JSP 2.0 + JQuery + JAX-WS 2 (by Apache CXF 2) +SpringSecurity 2.0。不过,如果你认为和SpringSide 2 相比,升级的只是版本号,那么你就大错特错了。

像我这样从SpringSide 2过来的人,如果能够详细对比SpringSide 2 和SpringSide 3,对于我们理解SpringSide 3肯定更加有帮助。下面的内容是我自己的一些体会,不正确的地方欢迎大家指正。

从主要的架构来,依然是那么几层,先设计数据库,再写Entity层,再写Dao层,再写Action,然后使用JSP表现出来,其中的Entity和Dao层和Hibernate紧密相关,Action是Struts的主要部分,Spring作为粘合剂,把这些东西连在一起,并提供了一些机制简化编写这些层的工作。SpringSide就是这样一个大的粘合体,省去了我们自己很多的粘合工作。从SpringSide 2 到SpringSide 3,这些工作得到进一步的简化,我们开发起来就更爽了。

我认为,我们的开发模式,主要经历了这样的简化过程:
第一阶段,代码加一大堆的配置文件
第二阶段,代码加少量的配置文件
第三阶段,代码加基本上等于零的配置文件

这些进步是如何实现的呢?从第一阶段到第二阶段,主要靠的是Annotation,把一些大量的配置工作转移到了Java代码中,那么从第二阶段到第三阶段怎么实现呢?都已经Annotation了,你还有什么办法让配置文件更少?想不到吧!我也想不到,直到我看了SpringSide 3生成的项目,我才知道还有一个好东西叫自动扫描。

下面使用实际的例子进行说明。作为示例,Hibernate是个不错的选择。

第一阶段,如果单独使用Hibernate,我们每写一个Entity类,就得同时写一个.hbm.xml文件,如果有很多Entity,就得写很多.hbm.xml文件,每修改一次Entity,也要同时记得修改.hbm.xml文件,相当的不方便,其目录结构如下图:
002.PNG

第二阶段,使用Annotation,SpringSide 2 中就是这样的方式。具体内容可以看我的另一篇博文《打通持久层的任督二脉》。所以我用SpringSide 2  进行开发的时候,写Entity也是两个步骤,但是比第一阶段要简单。就是先写一个Entity,Entity里面使用Annotation,如下图:
003.PNG

然后修改配置文件,SpringSide 2 中专门为Hibernate的定义开辟了一个专门的xml文件dataAccessContext-hibernate.xml,里面关于SessionFactory的定义是我们很熟悉的。我只需要将我的Entity类加入到里面就可以了,如下图中红笔圈出来的部分:
004.PNG

第二阶段和第一阶段相比,配置文件简单多了,不需要维护那么多的.hbm.xml。但是,每编写一个Entity,依然需要修改一下配置文件。

第三阶段就更了不起了,零配置文件,也就是说我们只管写Entity就行了,不需要管配置文件(当然,项目开始的时候还是要配置一次的)。打开SpringSide 3生成的项目,果然找不到dataAccessContext-hibernate.xml文件。那么是如何实现零配置的呢?靠的就是自动扫描,如下图中红笔圈出来的部分:
005.PNG

上面讲Hibernate只是为了举例说明我的观点,事实上SpringSide 3 中的零配置可不仅仅只存在这一个地方。

Dao层也可以不用配置了。在SpringSide 2 中,我们每写一个Dao,都需要在serviceContext.xml中加入这个类,如下图:
006.PNG

SpringSide 3 中使用自动扫描了,如下图:
007.PNG

以后编写Service后,再也不用修改配置文件了,只要我们在Service中使用如下Annotation:
008.PNG

事务也不用配置了,在SpringSide 2 中,事务是这样配置的:
009.PNG

SpringSide 3 中,事务配置是这样的:
010.PNG

011.PNG

Action也不用配置了,不过使得Action零配置的代码却在web.xml中,如下图:
012.PNG

还记得SpringSide 2 中的Struts配置代码吗?编写完Action类的代码后,还需要修改两个配置文件,如下:
013.PNG

014.PNG

所以说,SpringSide 3 的一个优点就是让生活变得更加简单了。在以上的截图中,SpringSide 2 项目用的是Eclipse 3.2,而SpringSide 3项目用的是Eclipse 3.4 For JavaEE Developers。哪一个IDE更爽,那也是一目了然。

评论

# re: SpringSide 3 中的新特性  回复  更多评论   

2008-12-05 18:37 by 虎啸龙吟
请多写写springSide方面的好文

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2008-12-05 22:11 by Jimmy
是阿,期待更多的好文

# re: SpringSide 3 的进步  回复  更多评论   

2008-12-05 23:18 by Elvea
其实我想说的,改进的主要是Spring 2.5的改进,SpringSide目前只是一个很简单的Demo,我没有贬低SS的意思。我个人很佩服Calvin的,一个人撑起这么打一片天。
还有我对Anotation的事务很反感,每个方法都要加上那些注释,还不如直接在XML上面配来的好。
我想Spring初学者的进阶看SS再好不过了

# re: SpringSide 3 的进步  回复  更多评论   

2008-12-08 11:13 by 徐尧
springside就是一个集成的功能,springside3就是升级了spring而已,改了改配置,springside2才是里程碑

# re: SpringSide 3 的进步  回复  更多评论   

2008-12-18 09:21 by Conan Lee
在SS2的时候,hbm.xml其实也可以这样配置。
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.max_fetch_depth">1</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.connection.characterEncoding">utf8</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
</props>
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath*:/cn/com/webinfo/model</value>
</list>
</property>
</bean>

# re: SpringSide 3 的进步  回复  更多评论   

2008-12-29 11:05 by 什么能力都干写博客
其实就是jar的升级,配置文件稍有变化,除此之外,你说说还有什么。
其实这就是spring的升级,和springside有关系吗?
真幼稚,你的技术只停留在这一层面,对框架的使用乐此不疲。
希望你能升级自己。

# re: SpringSide 3 的进步  回复  更多评论   

2009-01-12 19:08 by 江南白衣
谢谢游侠的好文,和你一比我就像不会写文档的一样:)

的确所有便利都是Spring,Struts2们升级带来的,SS3只是与时俱进的更新了自己的演示而已。

不过这个开源项目经常太监的年代,升级演示也算升级吧,大家不用这么在乎字眼吧:)

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2009-01-15 17:58 by ken
很不错的文章,谢谢作者的分享。
给:什么能力都干写博客
这些升级对于您的技术水平自然是不值一提,但相信还是对很多人有帮助的。相对于楼主的技术水平,我相信您的道德水平拥有更大的升级空间,不妨与楼主功勉,一起升级一下。

# re: SpringSide 3 的进步  回复  更多评论   

2009-01-15 18:40 by yzl45
@什么能力都干写博客
你这人真垃圾,人家也就是只是共享,你啥都不写,啥也不说,就知道讽刺别人,先正人品,在来做技术,再次鄙视你一下!

# re: SpringSide 3 的进步  回复  更多评论   

2009-02-20 16:01 by gaozh
真不错,非常感谢你的分享

# re: SpringSide 3 的进步  回复  更多评论   

2009-03-24 09:31 by 无聊的人
仔细看了看,觉得跟rapid-framework差不多

# re: SpringSide 3 的进步  回复  更多评论   

2009-03-25 09:18 by 初学者
你到底懂不懂springside这些都是spring2.5里的好不好?是spring2.0的一个升级。不知道不要乱讲。

# re: SpringSide 3 的进步  回复  更多评论   

2009-04-29 16:48 by bjliuming
好文章,谢谢!

# re: SpringSide 3 的进步  回复  更多评论   

2009-04-30 16:18 by 谢谢
难得把自己的体会写的这么详细的。
看了很感动。
“2009-03-25 09:18 by 初学者”这种不懂得尊重别人劳动成果的垃圾有多远就滚多远。

# re: SpringSide 3 的进步  回复  更多评论   

2009-06-30 20:37 by 学习
晕,骂人的人真不好。
提供这么个项目骨架,你们也说三道四的。

# re: SpringSide 3 的进步  回复  更多评论   

2009-07-27 10:19 by 谢谢分享
看完了不回复一下不厚道,骂人的更不厚道。

# re: SpringSide 3 的进步  回复  更多评论   

2009-08-17 14:29 by 游客
支持楼主,鄙视骂人的人
springside本来就是根据spring来的,看命名就知道了,那些骂人的人,你们太不尊重人家的劳动成果了。spring不也是依赖了一大堆开源包吗!!

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2009-12-12 12:06 by 路人甲
感谢楼主的分享!
楼主大可不必在乎,那些‘自以为是’的 人的辱骂。
支持你们的人大有人在,期待着你们进步和突破。

# re: SpringSide 3 的进步  回复  更多评论   

2009-12-23 13:39 by study
支持楼主。学习了。
那些骂人的人,需要先尊重别人,才能得到别人的尊重。

# re: SpringSide 3 的进步  回复  更多评论   

2010-03-04 21:48 by 匿名
很不错的资源~~
学习了··

# re: SpringSide 3 的进步  回复  更多评论   

2010-03-31 10:13 by 游客
springside,我拥护你!

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2010-04-09 13:26 by Mark
强烈支持博主!

# re: SpringSide 3 的进步  回复  更多评论   

2010-04-12 20:17 by adess
收藏,不错。
不知道大家有没注意到,用struts2作查询时,中文会显示乱码?是如何解决这个问题的,我用的是springside3, utf-8.

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2010-06-04 22:05 by kevin
这个年代有能力的人大有人在,但把自己所知道的写出来,分享出来的人是很欠缺的。

支持所有别人在休息玩耍他们默默在做奉献的人们。

# re: SpringSide 3 的进步  回复  更多评论   

2010-06-08 23:59 by qzh
谢谢楼主分享,

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2010-07-25 11:26 by leo
很好

# re: SpringSide 3 的进步  回复  更多评论   

2010-08-04 15:42 by cafe
对比讲解,清晰明了。
支持分享自己的经验,谢谢分享。

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2010-09-26 11:21 by Lee
谢谢你的付出,鄙视骂人者

# re: SpringSide 3 的进步  回复  更多评论   

2010-10-17 11:05 by skyxjy
好文,楼主辛苦了

# re: SpringSide 3 的进步  回复  更多评论   

2010-10-25 10:38 by mao
<property name="packagesToScan" value="xxxxx" />
<context:component-scan base-package="xxxx" />
问下楼主,像这俩个自动扫描,如果有多个不同的包放Entity和dao,可以写多个这样的配置吗?怎么区别在不同的包下放entity?

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2010-11-04 17:35 by 刘强
支持楼主,写很好。 希望楼主多出点关于这方的资料。
谢谢楼主。

# re: SpringSide 3 的进步[未登录]  回复  更多评论   

2010-12-08 08:36 by 如梦初醒
能够分享自己的经验、提出见解就是一种精神,值得尊重。BS暴粗口的。

# re: SpringSide 3 的进步  回复  更多评论   

2011-12-04 13:06 by jamcson
一直关注ss的成长

只有注册用户登录后才能发表评论。


网站导航: