2012-01-22 14 views
57

dopo alcuni giorni di tentativi e attesa per risposte sui forum di Spring Source, proverò qui. Esecuzione miei risultati di applicazione in questi eccezione:Nessun bean corrispondente di tipo ... trovato per dipendenza

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.example.my.services.user.UserService] 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)} 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707) 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
    javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) 
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) 
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) 
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
    java.lang.Thread.run(Thread.java:662) 

Ecco il codice relativo

contesto di applicazione:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="org.postgresql.Driver" /> 
    <property name="url" value="jdbc:postgresql://localhost:5432/test" /> 
    <property name="username" value="test" /> 
    <property name="password" value="test" /> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.example.my.entities.*" /> 
    <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> 
    <property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop> 
     <prop key="hibernate.show_sql">true</prop> 
    </props> 
    </property> 
</bean> 

<tx:annotation-driven /> 
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

com.example.my.entities.user:

@Entity 
@Table(name = "tbl_users") 
public class User 
{ 
    @Id 
    @Column(name = "id") 
    @GeneratedValue 
    private int id; 

    @Column(name = "username") 
    private String username; 

    @Column(name = "password") 
    private String password; 

    public void setId(int id) 
    { 
    this.id = id; 
    } 

    public int getId() 
    { 
    return id; 
    } 

    public void setUsername(String username) 
    { 
    this.username = username; 
    } 

    public String getUsername() 
    { 
    return username; 
    } 

    public void setPassword(String password) 
    { 
    this.password = password; 
    } 

    public String getPassword() 
    { 
    return password; 
    } 
} 

servizio:

@Service 
public class UserServiceImpl implements UserService 
{ 
    @Autowired 
    private UserDAO userDAO; 

    @Override 
    @Transactional 
    public void addUser(User user) 
    { 
    userDAO.addUser(user); 
    } 

    @Override 
    @Transactional 
    public List<User> listUsers() 
    { 
    return userDAO.listUsers(); 
    } 

    @Override 
    @Transactional 
    public void removeUser(int id) 
    { 
    userDAO.removeUser(id); 
    } 
} 
+0

Abbiamo anche bisogno di vedere il servlet Spring config. – skaffman

risposta

118

cose multiple possono causare questo, non mi preoccupai di controllare l'intero repository, così ho intenzione su un arto qui.

Prima di tutto, è possibile che manchi un'annotazione (@Service o @Component) dall'implementazione di com.example.my.services.user.UserService, se si utilizzano annotazioni per la configurazione. Se stai usando (solo) xml, probabilmente manchi lo <bean> -definizione per l'implementazione UserService.

Se si utilizzano annotazioni e l'implementazione è annotata correttamente, controllare che il pacchetto in cui si trova l'implementazione sia scansionato (controllare il valore <context:component-scan base-package=).

+6

Grazie, mi ha aiutato molto! Il mio pacchetto base era com.example.my.web.controller perché pensavo di avere solo bisogno del percorso dei controller. Modificato su com.example.my per coprire tutte le classi necessarie (dao, servizio, entità, controller) e ha funzionato bene! oh e ho cambiato la sessione factory class in org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean e rimosso la proprietà configurationClass. – dtrunk

+0

Nel mio caso, l'interfaccia era presente ma mancava la classe di implementazione. Aggiunta quella classe con @service e problema risolto. Grazie. –

+0

In realtà era il nome del pacchetto. – Xcoder

13

Aggiungi questo a voi applicationContext:

<bean id="userService" class="com.example.my.services.user.UserServiceImpl "> 
+0

Grazie anche, perché la tua risposta mi ha aiutato a capire che non copre tutte le mie lezioni. – dtrunk

10

Aggiungere annotazione @Repository alla testa di utenteDao.If userDao è un'interfaccia, aggiungere questa annotazione agli strumenti dell'interfaccia.

1

Ho avuto un problema simile, ma mi mancava la (@Service o @Component) dall'attuazione del com.example.my.services.myUser.MyUserServiceImpl

0

ho avuto lo stesso problema, ma nel mio caso, la classe implementata è diventata accidentalmente "astratta", in quanto l'autowiring stava fallendo.

6

Ho problemi simili nella configurazione di test, a causa dell'utilizzo di AOP. Ho aggiunto questa riga di codice in primavera-config.xml

<aop:config proxy-target-class="true"/> 

e funziona!

1

Se ciò si verifica solo nelle distribuzioni, assicurarsi di avere la dipendenza del pacchetto a cui si fa riferimento nel file .war. Ad esempio, questo funzionava localmente sulla mia macchina, con le debug configurate funzionanti, ma dopo la distribuzione su Amazon Elean Beanstalk, ho ricevuto questo errore e ho notato che una delle dipendenze non era inclusa nel pacchetto .war.

+0

Potresti anche consigliare come rendere la dipendenza raggruppata nel file .war? – LoBo

1

Nel mio caso è stata la dipendenza errata per CrudRepository. Il mio IDE aggiunto anche follwing:

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-commons</artifactId> 
     <version>1.11.2.RELEASE</version> 
    </dependency> 

Ma ho solo bisogno:

<dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
     <version>RELEASE</version> 
    </dependency> 

ho rimosso il primo e tutto andava bene.

Problemi correlati