2017-04-03 40 views
-2

你好,我是使用构造器注入在我的春天演示应用程序当我运行这个程序,我得到:java.lang.IllegalArgumentException异常在Java中使用的弹簧构造器注入

java.lang.IllegalArgumentException异常异常

任何人都有解决方案,我是黄的,每当我运行相同的程序使用setter注射它完美运行。

这里是我的EmployeeBean.java

package cris; 

public class Employee { 
    private int id; 
    private String name; 
    public Employee() { } 
    public Employee(int id,String name) { 
     this.id=id; 
     this.name=name; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
    void show() { 
     System.out.println(id+" "+name); 

    } 
} 

下面是一个使用我的地址Bean的setter注入

package cris; 

public class Address { 
private String city,state,country; 

public String getCity() { 
    return city; 
} 


public void setCity(String city) { 
    this.city = city; 
} 


public String getState() { 
    return state; 
} 


public void setState(String state) { 
    this.state = state; 
} 


public String getCountry() { 
    return country; 
} 


public void setCountry(String country) { 
    this.country = country; 
} 


public String toString() 
{ 
    return city+" "+state+" "+country; 
} 
} 

这里是我的spring.xml即Spring配置文件

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> 
<beans> 
<bean id="a1" class="cris.Address"> 
<property name="city" value="Tikamgarh"></property> 
<property name="state" value="Mp"></property> 
<property name="country" value="India"></property> 
</bean> 
<bean id="e" class="cris.Employee"> 
<constructor-arg type="int" value="12"></constructor-arg> 
<constructor-arg type="String" value="anil"></constructor-arg> 
</bean> 
</beans> 

这里是我的应用程序main方法

package cris; 

import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class Test { 
public static void main(String[] args) { 
    ApplicationContext context=new ClassPathXmlApplicationContext("cris/spring.xml"); 
    Employee emp = (Employee)context.getBean("e"); 
    emp.show(); 
} 
} 

好心给我提供建议,在那里我错了,所以我会捕获该异常感谢

例外:

Apr 03, 2017 4:16:16 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh 
INFO: Refreshing org[email protected]27f8302d: startup date [Mon Apr 03 16:16:16 IST 2017]; root of context hierarchy 
Apr 03, 2017 4:16:16 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [cris/spring.xml] 
Apr 03, 2017 4:16:16 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 
INFO: Pre-instantiating singletons in org.s[email protected]17550481: defining beans [a1,e]; root of factory hierarchy 
Exception in thread "main" java.lang.IllegalArgumentException 
    at org.springframework.asm.ClassReader.<init>(Unknown Source) 
    at org.springframework.asm.ClassReader.<init>(Unknown Source) 
    at org.springframework.asm.ClassReader.<init>(Unknown Source) 
    at org.springframework.core.LocalVariableTableParameterNameDiscoverer.inspectClass(LocalVariableTableParameterNameDiscoverer.java:112) 
    at org.springframework.core.LocalVariableTableParameterNameDiscoverer.getParameterNames(LocalVariableTableParameterNameDiscoverer.java:86) 
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1049) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:953) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
at cris.Test.main(Test.java:8) 
+0

你能为我们提供例外吗? – dpassy

+0

这里是我的例外链接,因为它太长,所以我提供链接抱歉不方便https://github.com/anildsvv14/Php-multiple-image-upload/blob/master/exception –

+0

请编辑您的问题与异常消息和代码为'地址'类。 – VPK

回答

0

填充当POJO的,(据我所知)默认情况下,Spring调用无参数构造函数。如果你决定用自己的参数编写一个cTor,你将不会得到一个默认的cTor,并且你必须为自己添加一个无参数cTor。

public Employee() { } 
+0

我也提供了默认的构造函数,但对例外sir –

+0

没有影响实际上,每个人都有正确的代码和正确的概念感谢您的宝贵意见经过长期的研究,我发现我使用spring 3x的解决方案java 8所以问题有两个解决方案,以安装java 7春季3x或使用春季4x与java 8 –

+0

@AnilKumarSahu我感觉到一些讽刺,所以请告诉我。你的意见是什么意思?你是否责怪我无法再帮助你?然后考虑阅读你的问题以及实际上是什么问题。没人能想出来。此外,你的下一个问题,我不会回答,因为你不明白人们试图帮助你。 –

0

添加类型构造函数精氨酸

<constructor-arg type="int" value="12" />

<constructor-arg type="java.lang.String" value="anil" />

编辑

,或者你CA N正向指标

<constructor-arg index="0" value="12" />

<constructor-arg index="1" value="anil" />

+0

我已经定义,但没有影响例外sir –

+0

你会在这里有另一个错误,这种方法适用于我。 – dpassy

+0

好 - 从spring.xml中删除'<!DOCTYPE'行 – dpassy

0

有spring.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" 
     xsi:schemaLocation = "http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="a1" class="cris.Address"> 
<property name="city" value="Tikamgarh"></property> 
<property name="state" value="Mp"></property> 
<property name="country" value="India"></property> 
</bean> 
<bean id="e" class="cris.Employee"> 
<constructor-arg type="int" value="12"></constructor-arg> 
<constructor-arg type="String" value="anil"></constructor-arg> 
</bean> 

</beans> 

编辑 我的例子:

春天。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" 
     xsi:schemaLocation = "http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="bean" class="Bean"> 
     <constructor-arg index="0" value="Test"/> 
     <constructor-arg index="1" value="2"/> 
    </bean> 

</beans> 

Bean.java

public class Bean { 

    private String test1; 
    private int test2; 

    public Bean(String test1, int test2) { 
     this.test1 = test1; 
     this.test2 = test2; 
    } 

    public String getTest1() { 
     return test1; 
    } 

    public void setTest1(String test1) { 
     this.test1 = test1; 
    } 

    public int getTest2() { 
     return test2; 
    } 

    public void setTest2(int test2) { 
     this.test2 = test2; 
    } 

    @Override 
    public String toString() { 
     return "Bean{" + 
       "test1='" + test1 + '\'' + 
       ", test2=" + test2 + 
       '}'; 
    } 
} 

Test.java

import org.springframework.context.support.ClassPathXmlApplicationContext; 

public class Test { 

    public static void main(String[] args) { 

     final ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml"); 

     final Bean bean = (Bean) ctx.getBean("bean"); 

     System.out.println(bean.toString()); 
    } 
} 

打印: Bean{test1='Test', test2=2}