spring 错误(org.springframework.beans.NotWritablePropertyException)
出现异常的原因是在application-xxx.xml中property name的错误。
<property name="...."> 中name的名字是与bean的set方法相关的,而且要注意大小写。
比如:
private PostDAO dao = null;
public void setPostDAO(PostDAO postDAO){
this.dao = postDAO;
}
}
<bean id="postManage" parent="txProxyTemplate">
<property name="target">
<bean class="com.yz.spring.service.implement.PostManageImpl">
<property name="postDAO"><ref bean="postDAO"/></property> 对
<property name="dao"><ref bean="postDAO"/></property> 错
</bean>
</property>
</bean>
package com.bjsxt.spring.dao;
public interface UserDao {
public void save(String username, String password);
}
package com.bjsxt.spring.dao;
public class UserDao4MySqlImpl implements UserDao {
public void save(String username, String password) {
System.out.println("--------UserDao4MySqlImpl.save()-------");
}
}
package com.bjsxt.spring.manager;
public interface UserManager {
public void save(String username, String password);
}
package com.bjsxt.spring.manager;
import com.bjsxt.spring.dao.UserDao;
public class UserManagerImpl implements UserManager {
private UserDao userDao;
// public UserManagerImpl(UserDao userDao) {
// this.userDao = userDao;
// }
public void save(String username, String password) {
this.userDao.save(username, password);
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<!--bean标签中id的值自己随意起,不过不能让他们重名,class属性的值必须是对应的实现类,不能是接口。 -->
<!--配置DAO,mysql实现与Oracle实现-->
<bean id="userDao4MySqlImpl" class="com.bjsxt.spring.dao.UserDao4MySqlImpl"/>
<bean id="userDao4OracleImpl" class="com.bjsxt.spring.dao.UserDao4OracleImpl"/>
<!--配置manager -->
<bean id="userManager" class="com.bjsxt.spring.manager.UserManagerImpl">
<!-- 构造方法注入,ref属性值是对应的bean标签的id属性值 -->
<!-- <constructor-arg ref="userDao4OracleImpl"/>-->
<!-- setter方法注入,name属性值是UserManage.java文件中定义的对象名userDao,ref是对应的bean标签中id属性的值。 -->
<property name="userDao" ref="userDao4MySqlImpl"/>
<!-- <property name="userDao" ref="userDao4OracleImpl"/>-->
</bean>
</beans>