Hybris中DAO服务启动报错:totalCustomersDao Bean创建失败咨询
NotWritablePropertyException(modelService属性无效)问题 嘿,这个问题我之前帮不少Hybris开发者踩过坑,本质就是Spring容器在初始化totalCustomersDao这个Bean的时候,找不到正确的方式给modelService属性赋值。下面是几个最常见的排查和解决方向,按顺序试基本就能搞定:
1. 先检查DAO类有没有modelService的setter方法
Spring默认用setter注入给属性赋值,所以你的de.hybris.training.core....这个DAO类必须要有符合JavaBean规范的public setter方法,比如:
private ModelService modelService; // 注意方法名是setModelService,首字母大写,参数类型要匹配 public void setModelService(ModelService modelService) { this.modelService = modelService; }
要是没这个方法,Spring根本不知道怎么给modelService赋值,直接就报“属性无效”的错。
2. 核对配置文件和类里的属性名是否完全一致
打开你的trainingcore-spring.xml,找到totalCustomersDao的配置段,比如:
<bean id="totalCustomersDao" class="de.hybris.training.core...."> <property name="modelService" ref="modelService"/> </bean>
这里的name="modelService"必须和DAO类里的属性名大小写完全一致——别小看拼写,比如把modelService写成modelservice或者ModelService,Spring都会认不出来。
3. 试试继承Hybris的DaoSupport基础类
如果你的DAO是自定义的,强烈建议继承Hybris提供的DaoSupport类,它已经帮你封装好了modelService的注入逻辑:
public class TotalCustomersDao extends DaoSupport { // 这里不用自己写modelService的setter,直接用getModelService()拿就行 public List<CustomerModel> findTotalCustomers() { // 示例:用继承来的modelService操作数据 return getModelService().find(...); } }
这种情况下,Spring会自动给你注入modelService,省得自己写setter还容易出错。
4. 确认配置里的类路径没写错
最后再检查下trainingcore-spring.xml里class属性的包名和类名是不是完全正确——有时候不小心引用了一个错误的类,那个类里根本没有modelService属性,自然会报这个错。
按上面的步骤逐一排查,一般很快就能解决问题啦。
内容的提问来源于stack exchange,提问作者asdasda asdasda

