問題:要么是因為構造方法改變了,要么就是構造方法入參實例化失敗(比如沒有實現)
問題
在練習spring構造器注入方式的小程序的時候報錯:
Exception in thread “main” org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘poeticDuke’ defined in class path resource [com/springinaction/springidol/spring-idol.xml]: Could not resolve matching constructor (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
原因和解決方法
報錯信息大體是說創建poeticDuke這個bean的時候出錯,出錯的原因是與構造器不匹配,給出的線索是為bean的構造器參數指定正確的索引、類或者名字,防止引起混淆。
構造器方法如下:
public PoeticJuggler(int beanBags, Poem poem) { super(beanBags); this.poem = poem; }
XML配置文件如下:
<bean id="sonnet29" class="com.springinaction.springidol.Sonnet29" /> <bean id="poeticDuke" class="com.springinaction.springidol.PoeticJuggler"> <constructor-arg value="15" /> <constructor-arg ref="sonnet29" /> </bean>
報錯信息說參數不匹配,猜測應該是指constructor-arg元素內的參數類型不匹配,這里”15”和”sonnet29”應當分別對應於int原始數據類型和Poem類,15肯定是int類型這沒問題,那么再看sonnet29,它是類Sonnet29的bean,然后我去看類Sonnet29是怎么寫的,才發現忘記去實現Poem接口了,然后加上接口,程序正常。
public class Sonnet29 implements Poem {/*Here goes body.*/}