代码之家  ›  专栏  ›  技术社区  ›  Jeg Bagus

未能自动连线批注

  •  1
  • Jeg Bagus  · 技术社区  · 14 年前

    为什么在执行时总是得到userDetailDao异常null:

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

    <security:authentication-provider user-service-ref="userService">
        <security:password-encoder hash="md5" />        
    </security:authentication-provider>
    
    <bean name="userService" class="com.springweb.service.UserService">
    </bean>
    

    在dispatcher上下文中,我已经定义要扫描包:

    <context:component-scan base-package="com.springweb"/>
    
    1 回复  |  直到 14 年前
        1
  •  4
  •   Community basarat    7 年前

    我想你的 UserDetailDao DispatcherServlet 上下文,因此在根webapp上下文中不可访问,其中 userService 已声明。所以, UserDetailsDao 应该在根上下文中声明为bean。

    你也需要 <context:annotation-driven/> 在根上下文中。

    调度员Servlet <context:component-scan> ,相同类的bean在根上下文中手动声明。应该避免这种情况-您需要指定要扫描的包 <上下文:组件扫描>

    另见: