fallado en anotación autowired
-
29-09-2019 - |
Pregunta
¿Por qué siempre me userDetailDao nula excepción cuando se ejecuta:
package com.springweb.service;
import com.springweb.dao.UserDetailDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.dao.DataAccessException;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.security.userdetails.UsernameNotFoundException;
public class UserService implements UserDetailsService
{
@Autowired
UserDetailDao userDetailDao;
public UserDetails loadUserByUsername(String string) throws UsernameNotFoundException, DataAccessException {
return userDetailDao.queryForUser(string);
}
}
en mi configuración de seguridad de primavera:
<security:authentication-provider user-service-ref="userService">
<security:password-encoder hash="md5" />
</security:authentication-provider>
<bean name="userService" class="com.springweb.service.UserService">
</bean>
y en mi contexto despachador, ya definir al paquete de análisis:
<context:component-scan base-package="com.springweb"/>
Solución
Creo que su UserDetailDao
se declara en el contexto DispatcherServlet
y por lo tanto no es accesible en el contexto webapp raíz donde se declara userService
. Así, UserDetailsDao
debe ser declarado como un grano en el contexto de la raíz.
También es necesario <context:annotation-driven/>
en el contexto de la raíz.
En general, usted tiene una duplicación de los granos de ahora - frijol se añaden al contexto DispatcherServlet
por <context:component-scan>
, y frijoles de las mismas clases se declaran de forma manual en el contexto de la raíz. Esta situación se debe evitar -. Necesita especificar los paquetes para ser escaneado por <context:component-scan>
con más cuidado
Ver también:
- ¿Dónde primavera archivos de configuración van en una guerra módulo? para la explicación del concepto de jerarquía contexto primavera. maven