2017-04-03 86 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}