2012-04-27 7 views
4

私は、次のしているJavaクラス:次のようにも春の注入は、コンストラクタ、引数のために働いていない

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:クラスパスresource [conf/applicationContext.xml]に定義された 'appConfig'という名前のBeanを作成中にエラーが発生しました:1コンストラクタ引数が指定されていますが、 「のAppConfig」(ヒント:タイプの曖昧さを避けるために、簡単なパラメータのインデックスおよび/または型引数を指定する)

次のように私はJavaのクラスのコードを変更する場合は春の注入は動作しますが:見ているだけ

package configuration; 
import common.config.ConfigurationServiceImpl; 

    public class AppConfig { 

     private ConfigurationServiceImpl configurationService; 

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

勤務開始時に何を更新しましたか?あなたは指摘できますか? –

+0

Eclipse IDEを使用していますか? – Bitmap

+0

@Zaheer AppConfigクラスを変更したとき。 –

答えて

2

最初に、Spring do not support interface injection,を知っている必要があります。なぜなら、コンストラクタargsとしてのインターフェイスであるConfigurationServiceを渡しているためです。

2番目のケースでは、ConfigurationServiceの実装クラスを渡して、それをコンストラクター引数として使用して正しく処理しています。

+0

が間違っています。http://stackoverflow.com/questions/2387431/spring-autowiring-class-vs-interface – chrismarx

+1

@chrismarx Springは、コンストラクタ引数のXML設定によるインターフェイスの注入をサポートしていません。あなたのリンクは、インターフェイスタイプリファレンスとautowired注釈を使ってautowiringに関する質問にリンクしています。その場合は、そのインタフェースへの自動配線の候補(実装)が見つかった場合にのみ機能します。実装がない場合、技術的にはそのシナリオのインタフェース注入はサポートされていません。そうではなく、ティトは「間違っていない」わけではありません。この場合は –

+0

、私の答えのupvoteが役立ちます。 – cherit

1

SprinのAppConfigのパッケージ名gの設定は、Javaソースで宣言されたパッケージと一致しません。あなたは "構成"に対して "common.config"を持っています。エラーテキストが誤解を招くことがあり、コンストラクタが見つからない理由は、クラス自体が見つからないことである可能性があります。

+0

は問題を修正しました。 –

関連する問題