2012-04-27 45 views
4

我有以下的Java類:春天注入不工作的構造,ARG

package configuration; 
import common.config.ConfigurationService; 

public class AppConfig { 

    private ConfigurationService configurationService; 

    public AppConfig(ConfigurationService configurationService){ 
     this.configurationService = configurationService; 
    } 

public class ConfigurationServiceImpl 
    implements ConfigurationService, Runnable 
{... 

和應用程序上下文文件如下:

<bean id="appConfig" class="configuration.AppConfig" scope="prototype"> 
     <constructor-arg ref="configurationService"></constructor-arg> 
    </bean> 

    <bean id="configurationService" class="common.config.ConfigurationServiceImpl" scope="singleton" /> 
    <bean id="propertyPlaceholderConfigurer" class="common.config.PropertyPlaceholderConfigurer"> 
     <constructor-arg ref="configurationService" /> 
     <constructor-arg ref="serviceName" /> 
    </bean> 

    <bean id="serviceName" class="java.lang.String"><constructor-arg value="filter"/></bean> 

初始化過程中我得到以下錯誤,我的豆沒有初始化:

引起:org.springframework.beans.factory.BeanCreationException:在類路徑資源[conf/applicationContext.xml]中定義的名稱爲'appConfig'的bean創建時出錯:1指定了構造函數參數,但沒有在bean中找到匹配的構造函數「AppConfig的」(提示:指定簡單的參數指標和/或類型的參數,以避免類型歧義)

雖然春季注射,如果我修改Java類代碼如下工作:

package configuration; 
import common.config.ConfigurationServiceImpl; 

    public class AppConfig { 

     private ConfigurationServiceImpl configurationService; 

     public AppConfig(ConfigurationServiceImpl configurationService){ 
      this.configurationService = configurationService; 
     } 
+0

當你開始爲你工作時,你有什麼更新。你能指出嗎? – 2012-04-27 13:12:09

+0

您使用Eclipse IDE嗎? – Bitmap 2012-04-27 13:25:55

+0

@Zaheer當我更改AppConfig類時。 – 2012-04-27 13:34:42

回答

2

首先,你必須知道Spring do not support interface injection,這就是爲什麼你的第一種情況下的代碼不起作用,因爲你正在傳遞一個接口作爲構造器參數的ConfigurationService。

在第二種情況下,您通過傳遞ConfigurationService的實現類並將其作爲構造函數參數來執行此操作。

+0

這只是平坦的錯誤 - http://stackoverflow.com/questions/2387431/spring-autowiring-class-vs-interface – chrismarx 2012-05-08 13:56:32

+1

@chrismarx Spring不支持通過構造函數參數XML配置注入接口。您的鏈接是關於使用接口類型引用和自動佈線註釋進行自動裝配的問題。在這種情況下,只有在可以找到用於自動裝配該接口的候選者(實現)時纔有效。如果沒有實現,那麼技術上在該場景中不支持接口注入。所以不,tito不是「錯誤的」。 – 2012-06-27 18:02:39

+0

在這種情況下,我的答案upvote會有所幫助。 – cherit 2012-07-19 15:35:21

1

只是看看在它,Sprin中AppConfig的包名稱g配置與Java源代碼中聲明的包不匹配。你有「common.config」與「配置」。這可能是因爲錯誤文本是誤導性的,構造函數未找到的原因是該類本身未找到。

+0

糾正了這個問題。 – 2012-04-29 18:39:30