正常情况下按照以往总结的三大框架整合的步骤开始搭建架构,自己手动拷入struts2相关jar文件,利用myecplise快捷方式导入hibernate和spring相关jar文件,自己再导入struts2、spring中间插件jar文件,把架构搭建起来之后开始配置并编写登录程序代码,对于持久层操作数据,想要使用hibernate的注解Annotation方式,(而不是采用原来的那种hbm配置文件的方式),所以在applicationContext.xml配置文件里面配置sessionFactory的时候是这样配置的:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<!-- 注入数据源 -->
<property name="dataSource">
<ref local="dataSource"/>
</property>
<!-- 因为这里的LocalSessionFactoryBean代表了Hibernate那个配置文件hibernate.cfg.xml,对于那个文件自己还有一些额外的信息,
比如是否显示hql语句、映射文件在什么地方等等。 -->
<!-- 下面开始配置。mappingResource指定的是hbm文件的位置映射, -->
<!--
<property name="mappingResources">
<list>
<value>PersonBean.hbm.xml</value>
</list>
</property>
<property name="packagesToScan">
<list>
<value>com.login.pojo</value>
<value>com.asset.pojo</value>
<value>com.maintain.pojo</value>
</list>
</property>
-->
<!-- annotatedClasses指定的是采用hibernate注释的各个实体文件(pojo文件) -->
<property name="annotatedClasses">
<list>
<value>com.audition.pojo.User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<!-- 方言 -->
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<!-- 是否显示sql语句 -->
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
</bean>
写完程序之后启动服务就出现了如下错误,非常坑爹:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]:Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError:
然后在网上一顿暴查,发现好多人遇到过这个问题,大概总结一下就是三大框架整合的时候jar包出现的冲突,有的人说是spring2.0里面cglib-nodep-2.1_3.jar出现了冲突,有的人说是asm.jar和asm-2.2.3.jar出现了冲突,还有的人说是hibernate-annotations.jar 和 hibernate-commons-annotations.jar和老版本的出现了冲突,等等,统统同都试过了,问题还是没有解决。这时想到了晚上一篇文章里提到的三大框架整合的时候
建议自己导入需要的jar包,而不要使用MyEclipse自动添加的包。这样不容易产生包冲突。于是自己在网上寻找下载了一个完整的三大框架整合时所需的所有jar包,把之前导入的包都删除掉之后把这些导入进入,然后问题解决了。OK。
下载下来的那个完整的包文件下载地址:
http://pan.baidu.com/s/1ntHNYlz
网上别人遇到的类似的但我都试过之后都没管用的一些链接:
http://blog.csdn.net/shangpusp/article/details/4037388
http://bbs.chinaunix.net/thread-3658418-1-1.html
http://xiao5461.blog.163.com/blog/static/22754562201231572030252/
http://www.iteye.com/problems/80980
和这个问题类似的也是由于三大框架整合包冲突引起的还有下面这个错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext
resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError:
解决问题方式和上面是一样的。
得出的结论是,
三大框架整合的时候最好是自己手动添加jar文件,不要使用myecplise的快捷键来添加,非常容易产生代码冲突的情况。
具体的在遇到上述问题的时候自己在网上下载了一个三大框架整合的所有需要到的jar文件,把这些jar文件导入进去,然后在导入数据库相关的驱动包就可以了。下载地址:
http://pan.baidu.com/s/1ntHNYlz
附件为测试通过的三大框架实现的登录模块程序示例。由于三个框架整合起来之后jar文件比较多,包比较大传不上俩,所以附件这个工程把所有引入的jar文件都删除了,需要下载下来演示的时候就把三个框架引用的jar文件重新添加一次即可(lib目录),三个框架引用的所有包文件下载地址:
http://pan.baidu.com/s/1ntHNYlz