org.springframework.beans.NotWritablePropertyException:
Invalid property 'service' of bean class [com.bjlz.action.LCsiveAction]:
Bean property 'service' is not writable or has an invalid setter method.
Does the parameter type of the setter match the return type of the getter?
public void setService(ServiceType service)。<property name="service" ref="serviceImpl"/>,serviceImpl 的實際類型必須兼容 Setter 參數類型(或其父類/接口)。private SomeService service; 但 setService(OtherService s) → 類型不兼容。
// 1. 檢查 Action 類
public class LCsiveAction {
private IService service; // 接口類型
public void setService(IService service) { this.service = service; } // 必須 public
}
// 2. 檢查 beans.xml
<bean id="service" class="com.bjlz.service.impl.ServiceImpl"/>
<bean id="action" class="com.bjlz.action.LCsiveAction">
<property name="service" ref="service"/>
</bean>
// 3. 檢查 ServiceImpl 是否實現 IService
public class ServiceImpl implements IService { ... }
// 4. 若仍報錯,啟用 DEBUG 日誌
log4j.logger.org.springframework.beans.factory.support=DEBUG
若改用註解注入:
@Controller
public class LCsiveAction {
@Autowired // 默認 byType
private IService service; // 無需 setter
}
需確保:
① IService 只有一個實現類,或用 @Qualifier("serviceImpl") 指定。
② 掃描包路徑正確 @ComponentScan("com.bjlz")。
③ 無循環依賴。