/ / Пружинната инжекция не работи за конструктор-арг - java, пружина

Пролетната инжекция не работи за конструктор-arg-java, spring

Имам следния клас 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: Грешка при създаването на bean с име "appConfig", дефинирано в ресурса на пътя на клас [conf / applicationContext.xml]: 1 конструкторски аргументи са посочени, но в bean "appConfig" не е намерен съвпадащ конструктор (намек: посочете аргументи за индекс и / или тип за прости параметри за да се избегнат неясноти)

Докато Spring инжекцията работи, ако променя кода на клас java, както следва:

package configuration;
import common.config.ConfigurationServiceImpl;

public class AppConfig {

private ConfigurationServiceImpl configurationService;

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

Отговори:

2 за отговор № 1

На първо място, трябва да знаете това Пролетта не поддържа интерфейсно инжектиране, и затова кодът в първия ви случай не работи, защото вие предавате ConfigurationService, който е интерфейс, както конструкторът аргументира.

Във втория случай го правите правилно, като предавате класа на изпълнение на ConfigurationService и го вземате като аргумент на конструктора.


1 за отговор № 2

Само като го гледам, името на пакета заAppConfig в конфигурацията Spring не съвпада с пакета, деклариран в източника на Java. Имате "common.config" срещу "конфигурация". Може да се окаже, че текстът за грешка е подвеждащ, че причината конструктора да не бъде намерена е, че самият клас не е намерен.