我在整合struts2+spring2+hibernate3时,applicationContext.xml文件中下面这行老是报错:
----------------------------------------
<bean id="spring-object-factory" class="org.apache.struts2.spring.StrutsSpringObjectFactory" init-method="initObjectFactory" /> 
----------------------------------------错误信息: No constructor with 0 argument(s) defined in class org.apache.struts2.spring.StrutsSpringObjectFactory 且在Tomcat启动时出现如下错误信息:
----------------------------------------
2008-04-18 23:16:33,800 [main] ERROR org.springframework.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'spring-object-factory' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.struts2.spring.StrutsSpringObjectFactory]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.apache.struts2.spring.StrutsSpringObjectFactory.<init>()
Caused by: 
org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.struts2.spring.StrutsSpringObjectFactory]: No default constructor found; nested exception is java.lang.NoSuchMethodException: org.apache.struts2.spring.StrutsSpringObjectFactory.<init>()
Caused by: 
java.lang.NoSuchMethodException: org.apache.struts2.spring.StrutsSpringObjectFactory.<init>()
at java.lang.Class.getConstructor0(Class.java:2647)
at java.lang.Class.getDeclaredConstructor(Class.java:1953)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:54)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:759)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:724)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:387)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:287)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:244)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:187)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3763)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4211)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:904)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:867)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:310)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1021)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1013)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
at org.apache.catalina.core.StandardService.start(StandardService.java:450)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:709)
at org.apache.catalina.startup.Catalina.start(Catalina.java:551)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)

解决方案 »

  1.   

    错误信息: No constructor with 0 argument(s) defined in class org.apache.struts2.spring.StrutsSpringObjectFactory
    错误信息出现在spring配置文件,你有一个类使用的是构造注入StrutsSpringObjectFactory,但是你应该没有在类代码中写构造方法   
      

  2.   

    下面是我的applicationContext.xml文件:  请高手帮我看看哪里错了?
    ---------------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <bean id="spring-object-factory" class="org.apache.struts2.spring.StrutsSpringObjectFactory" init-method="initObjectFactory" />

    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="com.microsoft.jdbc.sqlserver.SQLServerDriver">
    </property>
    <property name="url"
    value="jdbc:microsoft:sqlserver://localhost:1433">
    </property>
    <property name="username" value="sa"></property>
    <property name="password" value="sa"></property>
    </bean>
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.Oracle9Dialect
    </prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>com/example/hibernate/Users.hbm.xml</value></list>
    </property>
    </bean>

    <!-- Transaction Manage Bean -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>    <bean id="baseProxy" lazy-init="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
            <property name="transactionManager"><ref bean="transactionManager"/></property>
            <property name="transactionAttributes">
                <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>
    <!-- prop key="get*">PROPAGATION_REQUIRED,readOnly</prop-->
                </props>
            </property>
        </bean>

    <!--  Business Logic Bean -->
    <bean id="userService" parent="baseProxy">
        <property name="target"><ref local="userServiceImpl" /></property>
    </bean>
    <bean id="userServiceImpl" class="com.example.service.impl.UserServiceImpl" autowire="byName" />

    <!--  Struts2 Action Bean -->
    <bean id="UserManage" class="com.example.action.UserManage" scope="prototype" autowire="byName" >
      
    </bean>
    <!-- <bean id="UsersDAO" class="com.example.hibernate.UsersDAO">
    <property name="sessionFactory">
    <ref bean="sessionFactory" />
    </property>
    </bean> --></beans>
      

  3.   

    <bean id="spring-object-factory" class="org.apache.struts2.spring.StrutsSpringObjectFactory" init-method="initObjectFactory" /> 你这句是做什么用的,没用就去了吧,我整合的时候是没有用到这个
      

  4.   

    可以看看spring的文档如何整合struts,看你用的是struts整合spring的。spring作为主线
      

  5.   

    StrutsSpringObjectFactory  构造器的问题?
      

  6.   

    你是不是用constructor注入但是没写参数啊?
      

  7.   

    开发者突击 这本书有 SSH2 的例子,可以参考一下
      

  8.   

    我是这样写的
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean id="dataSource" destroy-method="close"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName">
    <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
    </property>
    <property name="url">
    <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=bookshop;SelectMethod=cursor</value>
    </property>
    <property name="username">
    <value>sa</value>
    </property>
    <property name="password">
    <value>123456</value>
    </property>

    </bean>
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="dataSource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.SQLServerDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">



    <value>bookshop/hbm/Category.hbm.xml</value>

    </property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory">
           <ref local="sessionFactory" />
        </property>
    </bean> 

    <bean id="baseTxProxy" lazy-init="true" abstract="true"
       class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="proxyInterfaces">
       <list>
       <value>bookshop.dao.IBasicDAO</value>
       </list>
       </property>
        <property name="transactionManager">
          <ref bean="transactionManager" />
        </property>  
        <property name="transactionAttributes">
          <props>
            <prop key="save*">PROPAGATION_REQUIRED</prop>
            <prop key="delete*">PROPAGATION_REQUIRED</prop>        
            <prop key="*">readOnly</prop>
          </props>
        </property>
        </bean>
     

    </beans>有一个问题哦~
    这里你是这样写的:
    <property name="driverClassName" 
    value="com.microsoft.jdbc.sqlserver.SQLServerDriver"> 
    </property> 
    可是这里
    <prop key="hibernate.dialect"> 
    org.hibernate.dialect.Oracle9Dialect 
    </prop> 
    方言指向的是Oracle,可以这样子写的吗?
      

  9.   

    先不要写那么长。。把东西都注释掉,让最基本的框架跑起来,再加入bean,action配置。。一下下就能排除错误。
      

  10.   

    就算不写那么长,jar包也经常冲突,我配一回错一回,每次都迷迷糊糊的改。
    关注ing...
      

  11.   

    你检查一下你的dataSource配置,你试一试将它的来类改为class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    eclipse版本问题,dataSource之间不能有空格。
      

  12.   

    jar包也经常冲突
    我配置的时候也是。迷迷糊糊的就OK了
    现在又一样的问题。。继续迷迷糊糊的寻找
    、得做一个笔记。。
      

  13.   

    看了你的顺序
    是不是你的整合的顺序不对啊
    有可能!!!
    (小建议)顺序
    Spring2---->Hibernate3.1---->Struts2开发环境最好用Myeclipse 6.0.1
    因为Struts2还没有大面积的使用所以Myeclipse5.5/5.0都不是很好使用  
      

  14.   

    跟楼主一样的问题,
    关键是现在是整合struts2.0的
    又不是struts1.2
    看了文档后才这么配了
    也不知道什么原因呢
      

  15.   

    我使用的   ActionSupprt 之后用 getWebApplicationContext 构造的ApplicationContext
      

  16.   

    建议lz使用struts2-spring-plugin-2.1.8.1.jar,就不需要配置lz的那个bean了,只需在strus.xm中配置
    struts.objectFactory=spring。即可。而且lz我看StrutsSpringObjectFactory没有initObjectFactory这个方法。
      

  17.   

    <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />web.xml
      

  18.   

    <bean id="spring-object-factory" class="org.apache.struts2.spring.StrutsSpringObjectFactory" init-method="initObjectFactory" />去掉这句 没什么用 估计咱俩下的是一个文档