spring 構造注入 異常 Ambiguous constructor argument types - did you specify the correct bean references as

你可能在作項目的時候,須要在項目啓動時初始化一個自定義的類,這個類中包含着一個有參的構造方法,這個構造方法中須要傳入一些參數。java

spring提供的這個功能叫「構造注入」,web

applicationContext.xml 添加須要項目初始化的代碼:算法

    <bean id="RedisInitBean" class="com.test.test.InitBean" >
        <constructor-arg index="0" type="String">
            <value>hello</value>
        </constructor-arg>    
        <constructor-arg index="1" type="String">
            <value>word</value>
        </constructor-arg>
        <constructor-arg index="2" type="String">
            <value>okey</value>
        </constructor-arg>            
    </bean>

解釋一下constructor-arg標籤中inde=「0「的意思,index="0"表明InitBean.java的有參構造方法的第一個參數,記住「不是從1開始,是從0開始的。」spring

在com.test.test包下建立一個InitBean.javaexpress

package com.test.test;

public class InitBean {
    
    private String a;
    private String b;
    private String c;
    
    public InitBean(String a, String b, String c) {
        super();
        this.a = a;
        this.b = b;
        this.c = c;
        System.out.println("------------------------");
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }

}

 

若是你出現如下錯誤:apache

嚴重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'RedisInitBean' defined in file [F:\java_workspace\own_test\99 測試算法\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVC-Redis\WEB-INF\classes\applicationContext.xml]: Unsatisfied dependency expressed through constructor argument with index 2 of type [java.lang.String]: Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:716)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:196)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:605)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:472)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4135)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4630)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:785)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:445)
    at org.apache.catalina.core.StandardService.start(StandardService.java:519)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:581)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

請檢查 constructor-arg 中 index="?" 寫的對不對。app

換句話說,若是你的構造方法須要傳入5個參數,那constructor-arg 中 index="N",N 最大是4,你能夠傳一個空值什麼都不寫,可是絕對不能超過4!eclipse

相關文章
相關標籤/搜索