2010-07-19 12 views
7

Mi app-config.xml tiene una definición para mi grano de UserDao:No se pudo Autowire campo, pero tengo la definición

<bean id="userDao" class="com.blah.core.db.hibernate.UserDaoImpl"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

tengo mi exploración de componente:

<context:component-scan base-package="com.blah" /> 

Mi acción index en mi HomeController funciona bien (muestra el contenido de un método en mi UserService a una plantilla de freemarker).

@Controller 
public class HomeController { 

    @Autowired 
    private UserService userService; 




    @RequestMapping("/") 
    public ModelAndView Index() { 



     ModelAndView mav = new ModelAndView(); 

     mav.setViewName("index"); 
     mav.addObject("message", userService.sayHello()); 

     mav.addObject("username", userService.getTestUser()); 


     return mav; 
    } 

El 'getTestUser()' es un nuevo método que hace referencia a UserDao, que parece:

@Service 
public class UserServiceImpl implements UserService{ 

    @Autowired 
    UserDao userDao; 

    public String sayHello() { 

     return "hello from user service impl part 2"; 

    } 

    public String getTestUser() { 


     return userDao.getById(1L).getUsername(); 

    } 


} 

estoy consiguiendo el error:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.blah.core.db.hibernate.UserDao com.blah.core.services.UserServiceImpl.userDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [com.blah.core.db.hibernate.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)} 
  1. Lo podría ser el problema?
  2. Si no hice el autoenvío, ¿qué estaría haciendo en lugar de agregar @AutoWire en la definición de UserDao?

Respuesta

15

Ha intentado exportar todos los granos registradas de primavera (o leer Spring's bootstrap log o de la memoria a través de debugging) para averiguar si el grano de userDao está en la lista. Por favor, asegúrese de que UserDaoImpl realmente esté implementando UserDao también. Lo estoy señalando porque no veo el fragmento de UserDaoImpl aquí.

Si no se utiliza @Autowired, la alternativa será la obtención explícitamente una referencia del grano a través Application Context de getBean() (que se considera como una forma sucia, arreglar su @Autowired en su lugar), a través de su nombre de frijol, nombre de la clase, etc.

+0

ok No estaba implementando el UserDao ahh! ¡Gracias! por cierto, ¿cómo se lee el registro de arranque de Spring o la memoria a través de la depuración?) ¡Esas son buenas habilidades que debería aprender! – Blankman

+0

He actualizado la respuesta con referencias al registro y la depuración. :) – yclian

Cuestiones relacionadas