Witam, przerabiam właśnie książkę "Spring w akcji" i pracując z przykładami z książki nie mogę przeskoczyć jednego błędu który sie pojawia. W książce nic o tym nie jest szerzej wyjaśnione. Szukałem, kombinowałem z zależnościami ale dalej nie chce przejść. Przykład jest prosty:
Klasa BraveKnight która przyjmuje w konstruktorze jakiś quest z interfejsu Quest
package com.springinaction.knights;
public class BraveKnight implements Knight {
private Quest quest;
public BraveKnight(Quest quest) {
this.quest=quest;
}
public void embarkOnQuest() {
quest.embark();
}
}
Interfejs:
package com.springinaction.knights;
public interface Quest {
void embark(){}
Następnie Klasa questu:
package com.springinaction.knights;
import java.io.PrintStream;
public class SlayDragonQuest implements Quest {
private PrintStream stream;
public SlayDragonQuest(PrintStream stream) {
this.stream=stream;
}
@Override
public void embark() {
stream.println("Embarking on quest to slay the dragon");
}
}
Prosta konfiguracja zależność w pliku knights.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http//www/springframework.org.schema/beans/spring-beans-3.0.xsd">
<bean id="knight" class ="com.springinaction.knights.BraveKnight.java">
<constructor-arg ref="quest" />
</bean>
<bean id ="quest"
class ="com.springinaction.knights.SlayDragonQuest">
<constructor-arg value="#{T(System).out}" />
</bean>
</beans>
I Klasa Main gdzie występuje błąd:
package com.springinaction.knights;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class KnightMain {
public static void main(String[] args) throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("knights.xml");
Knight knight = context.getBean("knight"); <---- Błąd - "Type mismatch: cannot convert from Object to Knight"
knight.embarkOnQuest();
context.close()
}
}
Niby wszystko powinno działać normalnie jednak w Klasie main w linijce gdzie musimy uzyskać komponent knight cały czas wyskakuje błąd "Type mismatch: cannot convert from Object to Knight" - rozumiem co to znaczy ale dlaczego ta zależność nie działa? Z góry dziękuje za pomoc lub wskazówki gdzie może dodać jakąś zależność lub czy coś mam źle skonfigurowane.
Aryman1983