我想我已经知道问题是什么了。我一直收到这个错误
org.springframework.beans.factory.BeanCreationException:
Could not autowire method: public void proTurism.DAO.AbstractDAO.setSession(org.hibernate.SessionFactory); nested exception is org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]:
Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
问题在于两个不兼容的ASM版本,一个使用spring和一个hibernate。我有hibernate ASM(netbeans 7.1中包含的未知版本)和spring ASM(3.0.6)。但我还没有找到任何解决方案如何让一个asm或任何东西让它在带有netbeans的glassfish中工作。
我的applicationcontext.xml
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="proTurism"/>
<property name="configurationClass">
<value>org.hibernate.cfg.AnnotationConfiguration</value>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
答案 0 :(得分:3)
这是一个严重的依赖问题。如果您的两个库(hibernate和spring)依赖于相同版本的ASM,或者根据所使用的功能依赖于非冲突版本的ASM,则只能解决此问题。如果不是这种情况,升级/降级spring / hibernate直到它工作。
如果使用Maven,它会自动显示哪个工件需要哪些版本的依赖项,并且更容易跟踪和使用。即使不使用maven,你仍然可以检查hibernate和spring的pom定义,看看它们使用的asm版本。