0

私のアプリケーションコンテキストはこれに似ています、

<bean id="caseTxBo" class="gov.case.rcp.bo.impl.caseTxBoImpl" >
            <property name="caseTxDao" ref="caseTxDao" />
    </bean>
    <bean id="caseTxDao" class="gov.case.rcp.dao.impl.caseTxDaoImpl" >
            <property name="sessionFactory" ref="sessionFactory" />

アクションクラスは、次のようなコンテキストを取得します。

ServletContext context = request.getSession().getServletContext();
     BeanFactory factory = WebApplicationContextUtils.
           getRequiredWebApplicationContext(context);
     CaseTxBOImpl caseTxBo = (

             caseTxBoImpl) factory.getBean("caseTxBo");

     List<caseTxPmt> errorVarList =       
     caseTxBo.getcaseTxDao().findAllcaseTx();

    model.put("caseTxList", caseTxList);

BOImplはDaoを実装し、DAOImplはDaoを実装します。

DaoImplには実装があり、caseTxListを返します。

しかし、私はrunTimeExceptionを次のように取得します

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'caseTxBo' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Cannot resolve reference to bean 'caseTxDao' while setting bean property 'caseTxDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'caseTxDao' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'sessionFactory' of bean class [gov.case.rcp.pp.dao.impl.CaseTxDaoImpl]: Bean property 'sessionFactory' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
follows:
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)

どこで私は間違えましたか?

4

1 に答える 1

4

Beanプロパティ'sessionFactory'が書き込み可能でないか、setterメソッドが無効です。セッターのパラメータータイプはゲッターのリターンタイプと一致しますか?次のとおりです:at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReferenceBeanDefinitionValueResolver.java:275

エラーメッセージはかなり明確です。を開き、CaseTxDaoImplそこに次の方法があることを確認します。

public void setSessionFactory(SessionFactory sessionFactory) {
    this.sessionFactory = sessionFactory;
}

ところでこれ:

ServletContext context = request.getSession().getServletContext();
BeanFactory factory = WebApplicationContextUtils.
       getRequiredWebApplicationContext(context);
factory.getBean("caseTxBo")

Springとアンチパターンのかなり低レベルの使用法です。Webフレームワークを使用していますか?通常、それらはSpringと非常によく統合されます。

于 2012-10-26T18:52:29.707 に答える