/ / Wiosna nie działa dla konstruktora-arg - Java, wiosna

Wtrysk sprężyny nie działa dla konstruktora-arg - java, wiosna

Mam następującą klasę Java:

package configuration;
import common.config.ConfigurationService;

public class AppConfig {

private ConfigurationService configurationService;

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

również

public class ConfigurationServiceImpl
implements ConfigurationService, Runnable
{...

a plik kontekstu aplikacji jest następujący:

<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>

podczas inicjalizacji pojawia się następujący błąd i moje ziarna nie są inicjowane:

Przyczyna: org.springframework.beans.factory.BeanCreationException: Błąd tworzenia komponentu bean o nazwie „appConfig” zdefiniowany w zasobie ścieżki klasy [conf / applicationContext.xml]: 1 argumentów konstruktora podano, ale nie znaleziono pasującego konstruktora w komponencie bean „appConfig” (wskazówka: podaj argumenty indeksu i / lub wpisz proste parametry aby uniknąć niejednoznaczności typu)

Podczas gdy Spring injection działa, jeśli zmodyfikuję kod klasy Java w następujący sposób:

package configuration;
import common.config.ConfigurationServiceImpl;

public class AppConfig {

private ConfigurationServiceImpl configurationService;

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

Odpowiedzi:

2 dla odpowiedzi № 1

Po pierwsze musisz to wiedzieć Wiosna nie obsługuje wstrzykiwania interfejsu, i dlatego kod w pierwszym przypadku nie działa, ponieważ przekazujesz ConfigurationService, który jest interfejsem, jak argumentuje konstruktor.

W drugim przypadku robisz to poprawnie, przekazując klasę implementacji ConfigurationService i przyjmując ją jako argument konstruktora.


1 dla odpowiedzi nr 2

Wystarczy spojrzeć na to, nazwa pakietu dlaAppConfig w konfiguracji Spring nie pasuje do pakietu zadeklarowanego w źródle Java. Masz „common.config” kontra „konfiguracja”. Możliwe, że tekst błędu wprowadza w błąd, a przyczyną, dla której nie znaleziono konstruktora, jest to, że nie znaleziono samej klasy.