Spring没有解析适当的构造函数

时间:2017-01-05 01:12:42

标签: java spring constructor-injection

感谢:感谢您的支持。

问题描述:

  1. 我在尝试运行以下代码时遇到异常。甚至没有线索。
  2. 如何编写xml定义以使用带有int参数的@Autowired Constructor启动Dependent类。
  3. ExceptionMessage:

    Exception in thread "main" org.springframework.beans.factory.BeanCreationException: 
    Error creating bean with name 'dependent' defined in class path 
     resource [simple-context.xml]: 
    Could not resolve matching constructor (hint: specify index/type/name arguments 
     for simple parameters to avoid type ambiguities)
    

    filename:spring-context.xml

     <?xml version="1.0" encoding="UTF-8"?>
     <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:c="http://www.springframework.org/schema/c"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans     
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
    
       <context:component-scan base-package="com.learning.spring.constinjection" />
    
       <bean id="dependency" class="com.learning.spring.constinjection.Dependency"></bean>
    
       <bean id="dependent" class="com.learning.spring.constinjection.Dependent">
            <constructor-arg ref="dependency" name="dpcy" />
            <constructor-arg name="mesg" value="Hi this is a test mesg" />
       </bean> 
    
       <bean id="dependent2" class="com.learning.spring.constinjection.Dependent" 
            c:mesg="Hi, this is another test mesg" /> 
    
    
     </beans>
    

    filename:Dependent.java

    public class Dependent {
    
        Dependency dpcy;
    
        Dependent(Dependency dpcy, String mesg){
          this.dpcy = dpcy;
          System.out.println("Message is: " + mesg);
        }
    
        Dependent(String mesg){
          System.out.println("Only Message is: " + mesg);
        }
    
        @Autowired
        Dependent(Integer ticketno){
          System.out.println("Ticket no is: " + ticketno);
        }
    
    }
    

    filename:Dependency.java

    public class Dependency {
    
      Dependency(){
          System.out.println("Dependency loaded successfully");
      }
    
    }
    

    filename:ConstructorInjectionApp

    public class ConstructorInjectionApp {
            public static void main(String[] args) {
    
            GenericXmlApplicationContext gen = new GenericXmlApplicationContext();
            gen.load("classpath:simplespringconstinjection.xml");
            gen.refresh();
            Dependent d = (Dependent) gen.getBean("dependent");
            Dependent d2 = (Dependent) gen.getBean("dependent2");   
    }
    }
    

1 个答案:

答案 0 :(得分:0)

通过更改:

<bean id="dependent" class="com.learning.spring.constinjection.Dependent">
        <constructor-arg ref="dependency" name="dpcy" />
        <constructor-arg name="mesg" value="Hi this is a test mesg" />
   </bean> 

到此:

<bean id="dependent" class="com.learning.spring.constinjection.Dependent" 
        c:dpcy-ref="dependency" c:mesg="Hi, this is another test mesg" />

我能够让ApplicationContext正确初始化而没有错误。

有关&#34; c&#34;的信息,请参阅this Spring doc。命名空间。

构造函数仍然存在@Autowired注释的问题。