Keine Abhängigkeit gefunden: Es wird mindestens 1 Bean erwartet, die als Autodrahtkandidat für diese Abhängigkeit qualifiziert ist. Abhängigkeitsanmerkungen:

71

Ich versuche, einen SOAP-Dienst mit Spring zu schreiben, erhalte jedoch ein Problem mit der Abhängigkeitsinjektion. Ich habe Probleme bei der Verwendung @Autowiredüber den Dienst wie folgt:

    public interface UserDao {
    User getUser(String username);
}

Implementierung für Dao wie folgt:

  @Controller("userDao")
    public class UserDaoImpl implements UserDao {
    private static Log log = LogFactory.getLog(UserDaoImpl.class);

    @Autowired
    @Qualifier("sessionFactory")
    private LocalSessionFactoryBean sessionFactory;

    @Override
    public User getUser(String username) {
        Session session = sessionFactory.getObject().openSession();
        // Criteria query = session.createCriteria(Student.class);
        Query query = session
                .createQuery("from User where username = :username");
        query.setParameter("username", username);
        try {
            System.out.println("\n Load Student by ID query is running...");
            /*
             * query.add(Restrictions.like("id", "%" + id + "%",
             * MatchMode.ANYWHERE)); return (Student) query.list();
             */
            return (User) query.uniqueResult();
        } catch (Exception e) {
            // TODO: handle exception
            log.info(e.toString());
        } finally {
            session.close();
        }
        return null;
    }

}

und

public interface UserBo {
    User loadUser(String username);
}

und

public class UserBoImpl implements UserBo {
    @Autowired
    private UserDao userDao;

    @Override
    public User loadUser(String username) {
        // TODO Auto-generated method stub
        return userDao.getUser(username);
    }

}


@WebService
@Component
public class UserService {

    @Autowired
    private UserBo userBo;

    @WebMethod(operationName = "say")
    public String sayHello(String name) {
        return ("Hello Java to " + name);
    }

    @WebMethod(operationName = "getUser")
    public User getUser(String username) {
        return userBo.loadUser(username);
    }
}

Das Folgende ist eine XML-Zuordnungsdatei

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ws="http://jax-ws.dev.java.net/spring/core"
    xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://jax-ws.dev.java.net/spring/core
    http://jax-ws.java.net/spring/core.xsd
    http://jax-ws.dev.java.net/spring/servlet
    http://jax-ws.java.net/spring/servlet.xsd

    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    <context:annotation-config />

    <context:component-scan base-package="edu.java.spring.ws"></context:component-scan>
    <context:component-scan base-package="edu.java.spring.ws.dao"></context:component-scan>
    <bean id="userDao" class="edu.java.spring.ws.dao.UserDaoImpl"></bean>
    <!-- <context:component-scan base-package="edu.java.spring.ws.bo"></context:component-scan>
     -->
    <wss:binding url="/user">
        <wss:service>
            <ws:service bean="#userService" />
        </wss:service>
    </wss:binding>
    <bean id="userBo" class="edu.java.spring.ws.bo.impl.UserBoImpl"></bean>
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/contentdb" />
        <property name="username" value="root" />
        <property name="password" value="123456" />
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
        <property name="packagesToScan" value="edu.java.spring.ws.model" />
    </bean>
</beans>

Bei der Bereitstellung wird folgender Fehler ausgegeben: Hier ist der aktualisierte Stack-Trace:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.sun.xml.ws.transport.http.servlet.SpringBinding#0' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot create inner bean '(inner bean)#538071ba' of type [org.jvnet.jax_ws_commons.spring.SpringService] while setting bean property 'service'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#538071ba' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'userService' while setting bean property 'bean'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.bo.UserBo edu.java.spring.ws.UserService.userBo; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userBo': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.dao.UserDao edu.java.spring.ws.bo.impl.UserBoImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.java.spring.ws.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:290)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:129)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1456)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4992)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5490)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#538071ba' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'userService' while setting bean property 'bean'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.bo.UserBo edu.java.spring.ws.UserService.userBo; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userBo': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.dao.UserDao edu.java.spring.ws.bo.impl.UserBoImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.java.spring.ws.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:336)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1456)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:276)
    ... 24 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.bo.UserBo edu.java.spring.ws.UserService.userBo; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userBo': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.dao.UserDao edu.java.spring.ws.bo.impl.UserBoImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.java.spring.ws.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
    ... 30 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.bo.UserBo edu.java.spring.ws.UserService.userBo; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userBo': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.dao.UserDao edu.java.spring.ws.bo.impl.UserBoImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.java.spring.ws.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
    ... 38 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userBo': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.dao.UserDao edu.java.spring.ws.bo.impl.UserBoImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.java.spring.ws.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1017)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:960)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
    ... 40 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private edu.java.spring.ws.dao.UserDao edu.java.spring.ws.bo.impl.UserBoImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.java.spring.ws.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
    ... 51 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [edu.java.spring.ws.dao.UserDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1103)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:963)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
    ... 53 more
user2659694
quelle
1
Können Sie die Implementierung Ihrer UserDaoKlasse hinzufügen ? Ist das als kommentiert Reporitory?
Jens
Entschuldigung, ich habe die Implementierung für Dao verpasst. Ich habe wie oben aktualisiert.
user2659694
1
Bitte fügen Sie die Repository-Annotation hinzu, wie von @Jens angefordert. Machen Sie auch einen Eintrag in der Mapping-Datei.
Nilesh
+ nILESH: Ich habe die Implementierungsmethode hinzugefügt. Bitte überprüfe es nocheinmal.
user2659694
1
Es tut uns leid, dass Sie dieses Google-Ergebnis huckepack genommen haben, um zu sagen: Wenn Sie Probleme haben, herauszufinden, wo das Problem liegt, nachdem Sie einige Dinge überarbeitet haben, stellen Sie sicher, dass Sie möglicherweise keine Methode verschoben haben, die einen Dienst aufgerufen hat ... in den gleichen Dienst. Wenn Sie dann müde genug sind, haben Sie vielleicht den Fehler gemacht, diesen Dienst automatisch in sich selbst zu verdrahten.
Bzzhuh

Antworten:

58

Schauen Sie sich die Ausnahme an:

No qualifying bean of type [edu.java.spring.ws.dao.UserDao] found for dependency

Dies bedeutet, dass keine Bean verfügbar ist, um diese Abhängigkeit zu erfüllen. Ja, Sie haben eine Implementierung der Schnittstelle, aber Sie haben keine Bean für diese Implementierung erstellt. Sie haben zwei Möglichkeiten:

  • Kommentieren Sie UserDaoImplmit @Componentoder @Repositoryund lassen Sie den Komponentenscan die Arbeit genau so für Sie erledigen, wie Sie es getan haben UserService.
  • Fügen Sie die Bean manuell zu Ihrer XML-Datei hinzu, genau wie Sie es getan haben UserBoImpl.

Denken Sie daran, dass Sie beim expliziten Erstellen der Bean die Definition vor dem Komponentenscan einfügen müssen. In diesem Fall ist die Reihenfolge wichtig.

Diegomtassis
quelle
Ich habe wirklich eine Bean in einer XML-Datei erstellt. Bitte überprüfen Sie noch einmal, um mir zu helfen. Danke
user2659694
1
Wenn Sie die Definition der Bean explizit in die XML-Datei einfügen, muss sie vor dem Komponentenscan platziert werden, der die abhängige Bean erstellt. Ich werde die Antwort verbessern.
Diegomtassis
15

Fügen Sie die Annotation @Repositoryzur Implementierung von hinzuUserDaoImpl

@Repository
public class UserDaoImpl implements UserDao {
    private static Log log = LogFactory.getLog(UserDaoImpl.class);

    @Autowired
    @Qualifier("sessionFactory")
    private LocalSessionFactoryBean sessionFactory;

    //...

}
Jens
quelle
Ich habe es als Ihren Vorschlag versucht, aber es ist nicht gut. Das Ablaufverfolgungsprotokoll wie unten Fehler beim Erstellen der Bean mit dem Namen 'userDaoImpl': Die Injektion von automatisch verdrahteten Abhängigkeiten ist fehlgeschlagen. verschachtelte Ausnahme isorg.springframework.beans.factory.BeanCreationException: Feld konnte nicht automatisch verdrahtet werden: private org.springframework.orm.hibernate4.LocalSessionFactoryBean edu.java.spring.ws.dao.impl.UserDaoImpl.sessionFactory; verschachtelte Ausnahme ist org.springframework.beans.factory.CannotLoadBeanClassException: Klasse [edu.java.spring.ws.dao.UserDaoImpl] für Bean mit dem Namen 'userDao'
user2659694
@ user2659694 schau hier vielleicht hilft das.
Jens
9

In meinem Fall wird der Anwendungskontext nicht geladen, da ich @DataJpaTestAnmerkungen hinzufüge . Wenn ich es ändere, @SpringBootTestfunktioniert es.

@DataJpaTestLädt nur den JPA-Teil einer Spring Boot-Anwendung. Im JavaDoc:

Anmerkung, die in Kombination mit @RunWith(SpringRunner.class)für einen typischen JPA-Test verwendet werden kann. Kann verwendet werden, wenn sich ein Test nur auf JPA-Komponenten konzentriert. Wenn Sie diese Anmerkung verwenden, wird die vollständige automatische Konfiguration deaktiviert und stattdessen nur die für JPA-Tests relevante Konfiguration angewendet.

Standardmäßig verwenden Tests, die mit Anmerkungen versehen @DataJpaTestsind, eine eingebettete In-Memory-Datenbank (die explizite oder normalerweise automatisch konfigurierte DataSource ersetzt). Die @AutoConfigureTestDatabaseAnmerkung kann verwendet werden, um diese Einstellungen zu überschreiben. Wenn Sie Ihre vollständige Anwendungskonfiguration laden möchten, aber eine eingebettete Datenbank verwenden möchten, sollten Sie eine @SpringBootTestKombination mit @AutoConfigureTestDatabasedieser Anmerkung in Betracht ziehen .

WesternGun
quelle
7

Ich habe @Servicevor impl Klasse hinzugefügt und der Fehler ist weg.

@Service
public class FCSPAnalysisImpl implements FCSPAnalysis
{}
Georgi Georgiev
quelle
4

Es scheint, dass Ihnen die Implementierung für die Schnittstelle UserDao fehlt. Wenn Sie sich die Ausnahme genau ansehen, heißt es

Für die Abhängigkeit wurde keine qualifizierende Bean vom Typ [edu.java.spring.ws.dao.UserDao] gefunden:

Die Funktionsweise @Autowiredbesteht darin, dass automatisch nach der Implementierung einer Abhängigkeit gesucht wird, die Sie über eine Schnittstelle einfügen. In diesem Fall erhalten Sie den Fehler, da es keine gültige Implementierung der Schnittstelle UserDao gibt. Stellen Sie sicher, dass Sie eine gültige Implementierung für diese Klasse haben und Ihr Fehler sollte verschwinden.

Hoffentlich hilft das.

Nilesh
quelle
3

Wir sind mit diesem Problem konfrontiert, hatten aber einen anderen Grund. Hier ist der Grund:

In unserem Projekt wurden mehrere Bean-Einträge mit demselben Bean-Namen gefunden. 1 in applicationcontext.xml & 1 in dispatcherServlet.xml

Beispiel:

<bean name="dataService" class="com.app.DataServiceImpl">
<bean name="dataService" class="com.app.DataServiceController">

& Wir versuchen, automatisch nach dem Namen dataService zu verdrahten.

Lösung: Wir haben den Bean-Namen geändert und ihn gelöst.

Jitendra Nandre
quelle
2

In meinem Fall musste ich die @ServiceAnnotation von der Schnittstelle in die Implementierungsklasse verschieben.

OAM
quelle
Bitte erklären Sie ein bisschen.
vonbrand
1
Durch Hinzufügen von @Service zu meiner Klasse wurde das Problem behoben. Meine Klasse wird jetzt automatisch vom Spring Injection Framework erfasst. Aber ich verstehe nicht warum :( ps Hinzufügen atComponentfunktioniert auch! Es ist eine niedrigere Klasse, also würde ich das stattdessen verwenden.
Dan Rayson
0

Fügen Sie vor Ihrer DAO-Implementierungsklasse eine Repository-Annotation hinzu. Beispiel:

@Repository
public class EmpDAOImpl extends BaseNamedParameterJdbcDaoSupportUAM 
implements EmpDAO{ 
}
Kumar Gaurav Sharma
quelle
0

Könnte ich mehrere Gründe dafür haben. Möglicherweise möchten Sie jedoch vergessen, @Bean für eine Komponente hinzuzufügen, die Sie mit @Autowired erstellt haben.

In meinem Fall habe ich vergessen, mit @Bean zu dekorieren, was dieses Problem verursacht.

kris
quelle
0

In meinem Fall hatte ich die folgende Struktur eines Projekts:

Geben Sie hier die Bildbeschreibung ein

Als ich den Test ausführte , erhielt ich immer wieder Probleme mit der Auro-Verkabelung der Fassaden- und Kafka- Attribute. Der Fehler kam mit Informationen über fehlende Instanzen zurück, obwohl sich die Test- und die API-Klasse im selben Paket befinden. Anscheinend wurden diese nicht gescannt.

Was tatsächlich geholfen hat, war das Hinzufügen einer @ Import- Annotation , die die fehlenden Klassen in den Spring-Klassenpfad bringt und sie instanziiert.

Marcin TP Łuczyński
quelle
0

Wenn Sie @DataJpaTest verwenden, müssen Sie Klassen explizit mit @Import laden. Es würde dich nicht für Auto laden.

Jack
quelle
0

Ich habe gerade diesen Fehler behoben, der in meinen Tests aufgetreten ist.

@MockBeanStellen Sie einfach sicher, dass Ihre Testklasse alle Abhängigkeiten in den Attributen der zu testenden Klasse aufweist, damit der SpringBoot-Testkontext Ihre Klassen korrekt verkabeln kann.

Nur wenn Sie den Controller testen: Sie benötigen auch Klassenanmerkungen , um den Controller-Kontext ordnungsgemäß zu laden.

Hör zu:

@DisplayName("UserController Adapter Test")
@WebMvcTest(UserController.class)
@AutoConfigureMockMvc(addFilters = false)
@Import(TestConfig.class)
public class UserControllerTest {

@Autowired
private MockMvc mockMvc;

@Autowired
private ObjectMapper objectMapper;

@MockBean
private CreateUserCommand createUserCommand;

@MockBean
private GetUserListQuery getUserListQuery;

@MockBean
private GetUserQuery getUserQuery;
jmojico
quelle
-1

Ich habe es versäumt hinzuzufügen

@Controller("userBo") into UserBoImpl class.

Die Lösung hierfür ist das Hinzufügen dieses Controllers zur Impl-Klasse.

user2659694
quelle
7
Ich bin mit dieser Antwort nicht einverstanden! Bitte schauen Sie noch einmal vorbei und sehen Sie, was Sie alles hinzugefügt haben.
Nilesh
Bitte warten Sie, bis ich es noch einmal überprüfe.
user2659694
1
Ihr BO ist kein Controller!
Jens
2
Markieren Sie eine Antwort nicht als "akzeptiert", nur weil sie Ihnen gehört. Finde die beste Antwort und akzeptiere sie.
Alexander Suraphel