No qualifying bean of type [com.thinkgem.jeesite.common.persistence.CrudDao]
found for dependency: expected at least 1 bean which qualifies as autowire candidate
CrudDao 所在包未被 @ComponentScan 或 <context:component-scan> 覆蓋。CrudDao 是接口,無實現類標註 @Repository,且無 XML 定義 <bean id="crudDao" class="..."/>。@Autowired 無法確定注入哪個,需 @Qualifier("specificDao")。
@Repository
public class CrudDaoImpl extends BaseDao implements CrudDao { ... }
檢查 Spring 配置:
<context:component-scan base-package="com.thinkgem.jeesite.common.persistence"/>
<bean id="crudDao" class="com.thinkgem.jeesite.common.persistence.CrudDaoImpl"/>
注入處用 @Resource(name="crudDao") 代替 @Autowired(byName 而非 byType)。
異常鏈顯示 CrudService.dao 注入失敗,若 CrudService 為泛型基類:
public abstract class CrudService<D extends CrudDao> {
@Autowired
protected D dao; // Spring 4+ 支持泛型注入,需確保運行時類型可解析
}
子類必須具體化泛型:
public class AomRapsService extends CrudService<AomRapsDao> { ... }
log4j.logger.org.springframework.beans.factory.support=DEBUG
log4j.logger.org.springframework.beans.factory.annotation=DEBUG
觀察 DefaultListableBeanFactory 輸出的候選 Bean 列表。
@Repository,包路徑納入掃描。@Autowired(單實現)或 @Resource(多實現指定名稱)。