NoSuchBeanDefinitionException: No bean named 'name' definiert ist
Ich versuche ein sehr einfaches Beispiel. Ich habe versucht zu sehen, andere stack overflow Antworten, konnte aber dieses problem nicht lösen. Ich bin neu in diesem Raum, lassen Sie mich wissen, wenn ich ausgelassen.
Hier ist mein error log :
Dec 11, 2017 8:40:20 AM org.springframework.Bohnen.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [BeanDefinition.xml]
Exception in thread "main" org.springframework.Bohnen.factory.NoSuchBeanDefinitionException: No bean named 'MySpringBeanWithDepenency' definiert ist
bei org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:638)
bei org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1159)
bei org.springframework.Bohnen.factory.Unterstützung.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:282)
bei org.springframework.Bohnen.factory.Unterstützung.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
bei org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973)
am Modell.main.Main.main(Main.java:18)
welche deutlich sagt, dass es nicht finden können, die MySpringBeanWithDepenency
Hier ist meine BeanDefinition.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="model.testbean" />
<context:component-scan base-package="model.writer" />
dies ist meine main Klasse :
package model.main;
/**
* Created by barora on 12/10/2017.
*/
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import model.testbean.MySpringBeanWithDepenency;
public class Main {
public static void main(String args[]){
ApplicationContext context = new ClassPathXmlApplicationContext(
"BeanDefinition.xml");
BeanFactory factory = context;
MySpringBeanWithDepenency test = (MySpringBeanWithDepenency) factory.getBean("MySpringBeanWithDepenency");
test.run();
}
}
dies ist mein MySpringBeanWithDepenency
package model.testbean;
/**
* Created by barora on 12/10/2017.
*/
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
import model.writer.IWriter;
import org.springframework.stereotype.Service;
@Service
public class MySpringBeanWithDepenency {
private IWriter writer;
@Autowired
public void setWriter(IWriter writer){
this.writer = writer;
}
public void run(){
String s = "This is my test";
writer.writer(s);
}
}
dies ist meine Ordner-Struktur :
- Sie haben
import
s in deinem zitierten code, aber nichtpackage
. Hat deine class-Datei beginnt mitpackage model.testbean;
? - By the way, jedes mal, wenn ich
depenency
stattdependency
, es stößt mich aus der Fähigkeit, sich zu konzentrieren auf den code. - Ich habe den code mit Paket. In Bezug auf die depenency, die Welt ist unvollkommen, mein Freund. Sie müssen mit Leben und sterben mit dieses große Leid.
- Gut, eines Tages wirst du mis-spell den Namen einer Variablen, und die person, die weiß die Antwort nicht deine Frage Lesen, weil es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, zu Debuggen hinzufügen:
Wenn dies druckt eine leere Liste, dann haben Sie ein Problem mit der classpath-scan. Wenn es druckt einen Namen, dann ist das ein name, den Sie verwenden können, um die Bohne.
Alternativ, statt
factory.getBean(String name)
verwendenfactory.getBean(MySpringBeanWithDependency.class)
, so dass Sie nicht brauchen, zu wissen, welchen Namen Frühling gegeben hat, die Ihre Bohne.BeanFactory factory = context
- können Sie einfachcontext.getBean()
direkt.dependency
in der Hoffnung, Sie würden propagieren die Korrektur der Rechtschreibung durch den rest des Codes.Versuchen
MySpringBeanWithDepenency test = (MySpringBeanWithDepenency) factory.getBean(MySpringBeanWithDepenency.class);
BEARBEITET
Also habe ich neu erstellt-code mit Projekt-Struktur. Es funktioniert mit Ausnahme, die ich verwendet habe folgenden code für
IWriter
und für die Umsetzung
BEARBEITET 2
Wenn Sie möchten zwei-Implementierung für
IWriter
- Schnittstelle und der beiden sein soll, spring managed beans müssen Sie helfen, spring-container, um zu entscheiden, welche Sie wollen, es zu autowire. Verwenden@Qualifier
für diese. Sehen tutorial für details