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>  

初期化中に次のエラーが発生し、Beanが初期化されません。

原因:org.springframework.beans.factory.BeanCreationException:クラスパスリソース[conf / applicationContext.xml]で定義された「appConfig」という名前のBeanの作成中にエラーが発生しました:1つのコンストラクター引数が指定されましたが、Bean「appConfig」に一致するコンストラクターが見つかりません(ヒント:型のあいまいさを避けるために、単純なパラメーターのインデックスおよび/または型引数を指定します)

次のようにJavaクラスコードを変更すると、Springインジェクションは機能します。

package configuration;
import common.config.ConfigurationServiceImpl;

    public class AppConfig {

        private ConfigurationServiceImpl configurationService;  

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

2 に答える 2

1

見ているだけで、Spring構成のAppConfigのパッケージ名は、Javaソースで宣言されているパッケージと一致しません。「common.config」と「configuration」があります。エラーテキストが誤解を招く可能性があります。コンストラクタが見つからない理由は、クラス自体が見つからないためです。

于 2012-04-29T12:33:54.513 に答える
1

まず、Springがインターフェイスインジェクションをサポートしていないことを知っておく必要があります。これが、コンストラクター引数としてインターフェイスであるConfigurationServiceを渡しているため、最初のケースのコードが機能しない理由です。

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

于 2012-05-03T09:29:04.050 に答える