java spring中使用构造函数注入的java.lang.IllegalArgumentException

java spring中使用构造函数注入的java.lang.IllegalArgumentException,java,spring,spring-mvc,constructor,Java,Spring,Spring Mvc,Constructor,您好,当我运行这个程序时,我在我的spring演示应用程序中使用构造函数注入,我得到: java.lang.IllegalArgumentException异常 任何人都有解决方案,无论我在哪里,只要我使用setter注入运行同一个程序,它就会完美地运行 这是我的EmployeeBean.java package cris; public class Employee { private int id; private String name; public Emplo

您好,当我运行这个程序时,我在我的spring演示应用程序中使用构造函数注入,我得到:

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

    }
}
这是我使用setter注入的地址Bean

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.xmlie 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>
请提供我的建议,我错了,所以我会抓住例外谢谢

例外情况:

Apr 03, 2017 4:16:16 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@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.springframework.beans.factory.support.DefaultListableBeanFactory@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)
2017年4月3日下午4:16:16 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息:刷新org.springframework.context.support。ClassPathXmlApplicationContext@27f8302d:启动日期[2017年4月3日星期一16:16:16 IST];上下文层次结构的根
2017年4月3日下午4:16:16 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息:从类路径资源[cris/spring.XML]加载XMLBean定义
2017年4月3日下午4:16:16 org.springframework.beans.factory.support.DefaultListableBeanFactory预实例化单例
信息:在org.springframework.beans.factory.support中预实例化单例。DefaultListableBeanFactory@17550481:定义bean[a1,e];工厂层次结构的根
线程“main”java.lang.IllegalArgumentException中出现异常
位于org.springframework.asm.ClassReader。(未知来源)
位于org.springframework.asm.ClassReader。(未知来源)
位于org.springframework.asm.ClassReader。(未知来源)
位于org.springframework.core.LocalVariableTableParameterNameDiscoveryr.inspectClass(LocalVariableTableParameterNameDiscoveryr.java:112)
位于org.springframework.core.LocalVariableTableParameterNameDiscoveryr.getParameterNames(LocalVariableTableParameterNameDiscoveryr.java:86)
位于org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:193)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1049)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:953)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:490)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
位于org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
位于org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:607)
位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:83)
位于cris.Test.main(Test.java:8)
在填充POJO时,(据我所知),Spring默认调用无参数构造函数。如果您决定自己编写一个带有参数的cTor,那么将不会生成默认的cTor,您必须自己为spring添加一个无参数cTor

public Employee() { }

将类型添加到构造函数参数

编辑

也可以使用索引


使用如下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>
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}

我也有同样的问题,直到我阅读了当前帖子中的每一条评论并发现


使用Spring3.*和Java11,这是一个兼容性问题。当我下载最新版本(Spring5.*)并设置为类路径时。然后一切正常。

你能为我们提供例外吗?这是我的例外链接,因为它太长了,所以我提供了链接,很抱歉不方便,请用例外消息和代码编辑你的问题,地址为
类。尝试使用
而不仅仅是
字符串
。我也提供了默认构造函数,但对异常没有影响sirNo回答对我有效事实上每个人都有正确的代码和正确的概念感谢你的宝贵意见经过长期研究我找到了解决方案我在java 8中使用spring 3x,所以问题在于有两种解决方案,使用spring 3x安装java 7或使用java中的spring 4x8@AnilKumarSahu我觉得有些讽刺,所以请告诉我。你的评论是什么意思?你是在责怪我不能进一步帮助你吗?然后考虑阅读你的问题和实际问题。没人能想到这一点。此外,我不会回答你的下一个问题,因为你不喜欢有人试图帮助你。Jeroen van Dijk Jun爵士我没有在我的评论中批评你,也没有批评任何人。我感谢所有的评论,先生,事实上昨天我尝试了spring 4x libs并解决了这个问题。如果你觉得我责怪你,我很抱歉。我只是在网上发表评论,以便有相同问题的人能够轻松理解解决方案,我关心的是解决问题,不要责怪任何人plz尝试理解plz投票问题
<?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>
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 +
                '}';
    }
}
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());
    }
}