2012-01-22 15 views
57

después de algunos días de intentar y esperar respuestas en los foros de springsource Lo intentaré aquí. Ejecución de mis resultados de la aplicación de estos excepción:No se ha encontrado un bean de tipo ... encontrado para la dependencia

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) 

Aquí está el código correspondiente

contexto de aplicación:

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

servicio:

@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

Necesitamos ver la configuración del resorte del servlet también. – skaffman

Respuesta

118

cosas múltiples pueden causar esto, no se molestó en comprobar todo su repositorio, por lo que voy a salir a un miembro aquí.

En primer lugar, puede que falte una anotación (@Service o @Component) de la implementación de com.example.my.services.user.UserService, si está utilizando anotaciones para la configuración. Si está utilizando (solo) xml, es probable que le falte la definición <bean> para la implementación UserService.

Si está utilizando anotaciones y la implementación está anotada correctamente, verifique que el paquete donde se encuentra la implementación se escanea (consulte su valor <context:component-scan base-package=).

+6

¡Gracias, eso me ayudó mucho! Mi paquete base era com.example.my.web.controller porque pensaba que solo necesitaba la ruta a los controladores. Cambié a com.example.my para cubrir todas las clases necesarias (dao, service, entity, controller) y funcionó bien. Ah, y he cambiado la clase de fábrica de la sesión a org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean y eliminé la propiedad configurationClass. – dtrunk

+0

En mi caso, la interfaz estaba presente pero faltaba la clase de implementación. Agregó esa clase con @service y problema resuelto. Gracias. –

+0

En realidad, era el nombre del paquete. – Xcoder

13

Añadir esto a usted applicationContext:

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

Gracias también, porque su respuesta me ayudó a darme cuenta de que no cubre todas mis clases. – dtrunk

10

Agregue la anotación @Repository al encabezado de la clase de usuario. Si UserDao es una interfaz, agregue esta anotación a los implementos de la interfaz.

1

tuve un problema similar, pero me faltaba el (@Service o @Component) de la aplicación de com.example.my.services.myUser.MyUserServiceImpl

0

he tenido el mismo problema, pero en mi caso, La clase implementada se convirtió accidentalmente en "abstracta", como resultado, el autovínculo estaba fallando.

6

Tengo problemas similares en la configuración de prueba, debido al uso de AOP. añadí esta línea de código en primavera-config.xml

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

y funciona!

1

Si esto solo ocurre en implementaciones, asegúrese de tener la dependencia del paquete al que hace referencia en .war. Por ejemplo, esto funcionaba localmente en mi máquina, con configuraciones de depuración funcionando bien, pero después de implementar en Elastic Beanstalk de Amazon, recibí este error y noté que una de las dependencias no estaba incluida en el paquete .war.

+0

¿Podría indicarnos también cómo hacer que la dependencia se incluya en el .war? – LoBo

1

En mi caso, era la dependencia incorrecta para CrudRepository. Mi IDE también añaden siguientes aparatos:

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

Pero sólo necesitaba:

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

Quité el primero y todo estaba bien.

Cuestiones relacionadas