applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?>   
<beans default-autowire="byType"  
    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="jdbcConfiguration" 
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
<property name="locations"> 
<list> 
<value>classpath:jdbc.properties</value> 
</list> 
</property> 
</bean> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">   
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>   
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/qipu"/>   
        <property name="username" value="root"/>   
        <property name="password" value="123456" />   
    </bean> 
<!-- Transactions --> 
<bean id="transactionManager" 
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
<property name="dataSource"> 
<ref bean="dataSource"/> 
</property> 
</bean> 
<!-- spring的ibatis 配制 --> 
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
<property name="configLocation" value="/WEB-INF/classes/sqlmapconfig.xml" /> 
<property name="dataSource"> 
<ref bean="dataSource"/> 
</property> 
</bean> 
    <!-- bean中的class为实现接口的类;property的name为类中引用的属性名称;ref为spring注册的名称,如上面的client   -->     <bean id="productDao" class="com.jlh.dao.AddDAOImpl"> 
    <property name="sqlMapClient" ref="sqlMapClient"></property> 
</bean> 
   
    <bean id="userService"  
        class="com.jlh.service.AddServiceImpl">   
        <property name="productDAO" ref="productDao"></property>   
    </bean> 
     
</beans> 错误是: 严重: Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productDao' defined in ServletContext resource [/WEB-INF/classes/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'sqlMapClient' of bean class [com.jlh.dao.AddDAOImpl]: Bean property 'sqlMapClient' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'sqlMapClient' of bean class [com.jlh.dao.AddDAOImpl]: Bean property 'sqlMapClient' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:748) 
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:606) 
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValue(AbstractPropertyAccessor.java:49) 
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:74) 
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57) 
at org.springframework.beans.factory.support.AbstractBeanFactory.applyPropertyValues(AbstractBeanFactory.java:840) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1026) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:809) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:425) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:250) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:247) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:161) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:273) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:346) 
at org.springframework.web.context.support.AbstractRefreshableWebApplicationContext.refresh(AbstractRefreshableWebApplicationContext.java:156) 
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:184) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3764) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4216) 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:544) 
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920) 
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883) 
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492) 
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138) 
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311) 
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
at org.apache.catalina.core.StandardService.start(StandardService.java:448) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 
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:295) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) 

解决方案 »

  1.   

    Bean property 'sqlMapClient' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 看看setter方法
      

  2.   

    添加:
    <bean id="sqlMapClientTemplate"
    class="org.springframework.orm.ibatis.SqlMapClientTemplate">
    <property name="sqlMapClient">
    <ref bean="sqlMapClient" />
    </property>
    </bean>
    修改:
    <bean id="productDao" class="com.jlh.dao.AddDAOImpl"> 
        <property name="sqlMapClientTemplate">
        <ref bean="sqlMapClientTemplate" />
       </property> 
    </bean>