我有以下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;
}
答案 0 :(得分:2)
首先,您必须知道Spring do not support interface injection,,这就是为什么第一种情况下的代码不起作用,因为您传递的是ConfigurationService,它是一个接口作为构造函数args。
在第二种情况下,您通过传递ConfigurationService的实现类并将其作为构造函数参数来正确执行。
答案 1 :(得分:1)
只是看一下,Spring配置中AppConfig的包名称与Java源代码中声明的包不匹配。你有“common.config”与“配置”。可能是错误文本具有误导性,未找到构造函数的原因是找不到类本身。