zoukankan      html  css  js  c++  java
  • spring 构造注入 异常 Ambiguous constructor argument types

    你可能在做项目的时候,需要在项目启动时初始化一个自定义的类,这个类中包含着一个有参的构造方法,这个构造方法中需要传入一些参数。

    spring提供的这个功能叫“构造注入”,

    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开始的。”

    在com.test.test包下创建一个InitBean.java

    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);
        }
    
    }

    如果你出现以下错误:

    严重: 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_workspaceown_test99 测试算法.metadata.pluginsorg.eclipse.wst.server.core	mp0wtpwebappsSpringMVC-RedisWEB-INFclassesapplicationContext.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="?" 写的对不对。

    换句话说,如果你的构造方法需要传入5个参数,那constructor-arg 中 index="N",N 最大是4,你可以传一个空值什么都不写,但是绝对不能超过4!

  • 相关阅读:
    tailf、tail -f、tail -F三者区别(转)
    Jackson是线程安全的吗
    SecureCRT同时向多个终端发送命令
    SecureCRT设置和Xshell一样的快速命令集(使用快捷键输入命令和密码)
    SecureCRT配色方案
    Java中判断字符串是否为数字的方法
    MySQL错误:Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL easonjim
    SecureCRT导出服务器列表或配置文件
    java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.<init>()
    Badge
  • 原文地址:https://www.cnblogs.com/zhengbn/p/4139980.html
Copyright © 2011-2022 走看看