首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring BeanCreationException:service 屬性不可寫/Setter 類型不匹配排查

     編輯:程式設計綜合問答

異常堆疊核心信息

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?

常見原因與排查步驟

  1. 缺少 Setter 方法
    Action 類中必須有 public void setService(ServiceType service)。
  2. Setter 參數類型與注入 Bean 類型不匹配
    若 XML 配置 <property name="service" ref="serviceImpl"/>,serviceImpl 的實際類型必須兼容 Setter 參數類型(或其父類/接口)。
  3. 字段類型與 Setter 參數不一致
    private SomeService service; 但 setService(OtherService s) → 類型不兼容。
  4. JAR 包衝突/缺失
    類加載器加載到不同版本的同名類,導致類型不匹配(原帖最終發現是少 JAR 包)。

快速定位檢查清單


// 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

進階:@Autowired 注解場景

若改用註解注入:

@Controller
public class LCsiveAction {
    @Autowired // 默認 byType
    private IService service; // 無需 setter
}

需確保:
① IService 只有一個實現類,或用 @Qualifier("serviceImpl") 指定。
② 掃描包路徑正確 @ComponentScan("com.bjlz")。
③ 無循環依賴。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved