从建立宠物医院(PetClinic)项目开始你的Spring2之旅

搞Java企业级应用的人都知道Spring是个好东西,记得这玩意1.0出来的时候,有人甚至说“有了Spring,架构师就可以下岗了”。当然,Spring不是上帝,它提供的只是一套优雅的框架(Framework)。
这套框架以依赖注入(Dependency Injection)控制反转(IOC,Inversion of Control)和面向切面编程(AOP,Aspect Oriented Programming)为核心思想。前者以Spring bean配置的方式来划分应用中服务的层次,并对各个应用模块及业务逻辑的松散耦合、甚至解耦合提供了完美的支持;而后者在日志、监控管理,特别是事务管理方面为开发者提供了一套极为轻便、灵活,而且有效的架构――我们只需要站在程序的横切面角度去配置一些“拦截”、“代理”就可以轻松的解决上述问题,而不需要去关注线性的程序结构、甚至不需要去修改一行代码,真正做到无任何“伤筋动骨”的为我们的应用去添加、变更、去除这些诸如日志、监控、事务等的功能。
同时,Spring也一贯本着“不重复发明轮子”的基本指导思想,在其内集成或封装了大量的开源项目,而且这些开源项目都是经过精心挑选的,至少在其领域内是具有实用价值的。这包括著名的ORM框架Hibernate,任务调度引擎Apache Quartz,以及JMS、JMX这些Java标准……
那么,如果你想试用和了解Spring2的强大功能和技术架构,我认为在Tomcat上运行一下它的范例项目petclinic(宠物医院)是个不错的选择。
首先,你可以在Spring2完整发布版的samples目录下发现这个项目。我喜欢把项目导入到Eclipse中运行,这样可以很方便的随时跟踪和学习源代码,所以,就以此为例吧。
先将这个项目拷贝到你需要的位置,然后就不要变更这个路径了。
1、执行这个项目根目录下的build.xml(如何利用ant执行构建在这里就不说了),使用ant all吧。这样你会在dist目录中获得可部署的war文件,注意:如果build不成功的话,你有可能需要更改build.xml的<property name="spring.root" value="../.."/>这一行,修正Spring2的根路径。
2、使用数据库――在db目录下有我们需要的所有数据库文件、脚本。默认提供hsqldb和mysql两种数据库支持方式,我们选择前者,因为简单。进入hsqldb目录运行server.bat启动数据库,manager.bat可以打开控制台管理数据库(具体如何使用hsqldb这里就不说了,很简单的),然后我们可以使用initDB.txt建库表,使用populateDB.txt加入初始化数据。如果启动失败,你可以检查一下你的server.bat中"%JAVA_HOME%/bin/java" -classpath hsqldb.jar org.hsqldb.Server -database petclinic是否正确,修正hsqldb.jar的路径(建议直接把这个jar复制到此目录中),manager.bat同理。
3、在Eclipse中建立petclinic项目――在petclinic目录根下新建Java项目即可,源程序目录设定为src。如果你想做jUnit test则需要引入spring-mock.jar(这在Spring2的dist中可以找到),这样你就可以利用test目录中的内容执行单元测试了。因为web module目录名为war,则相应的我们输出目录应修改为:war/WEB-INF/classes。
4、相信你已经在IDE中安装好的Tomcat插件了吧(什么?没有,那你还玩什么Spring,推荐你去下载官方的Eclipse Tomcat插件吧: http://www.eclipsetotale.com/tomcatPlugin.html),部署刚才建立好的petclinic项目上去,启动数据库,运行Tomcat。
5、打开petclinic的首页,一般来说是 http://127.0.0.1:8080/petclinic,如何,能看到正确的页面么?也许你会遇到以下这两个问题:
先是报告web.xml的tag标签格式或位置不正确之类的错误。这是因为你用的是Tomcat4.X,而petclinic的前端展现使用的是jstl,它需要中间件支持 http://java.sun.com/dtd/web-app_2_4.dtd规范,而Tomcat4.X只支持到2.3规范,所以,换成Tomcat5.X就好了。
然后你有可能碰到诸如资源文件找不到之类的问题(Resource not found),这是用于你的国际化资源文件没有在源路径中的问题,解决方法:拷贝原始项目中WEB-INF/classes中的messages*.properties文件到你的src根目录下,再重新编译一遍项目即可。
6、现在,你的宠物医院应该可以正常工作了!
这个范例同时提供了多种持久化方案的示范,这包括JDBC(默认的),Hibernate,JPA,Toplink。更改web.xml的contextConfigLocation属性即可轻松的切换这些持久化方案,通过学习这些不同的持久化实现,你能充分体会到Spring“不重复发明轮子”的魅力及其架构精髓。
需要注意的是,如果是JPA(Java持久化架构)方案的话,需要将spring-tomcat-weaver.jar拷贝到TOMCAT_HOME/server/lib,同时在你的Tomcat Context path中指定一个特殊的类加载器,像这样:
<Context path="/petclinic" docBase="/petclinic/location" ...>
  <!-- please note that useSystemClassLoaderAsParent is available since Tomcat 5.5.20; remove it if previous versions are being used -->
  <Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" useSystemClassLoaderAsParent="false"/>
...
</Context>
Spring2使用的是Hibernate3.X版本,如果需要使用merge这个操作的话,需要在Spring配置文件中为Hibernate的SessionFactory注册一个IdTransferringMergeEventListener,利用Spring的默认实现就行,PetClinic里面有相应的示例。
 
 

本文出自 “碧荷故乡_胡奇” 博客,转载请与作者联系!

你可能感兴趣的:(职场,休闲)