2015-06-27 139 views
5

这是我的组件,其中包含userService自动连线。问题是未初始化,始终为空。用户服务从控制器正常工作。@Component中的Spring @Autowired变量为null

自动装配组件内的服务应该做些什么?

package com.boro.orange.component; 

@Component("modelUtil") 
public class ModelUtil { 
    @Autowired 
    private UserService userService; //null 

    static Logger log = Logger.getLogger(ModelUtil.class.getName()); 

    public ModelMap warp(ModelMap model) { 

     Object springUserObject = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
     if (springUserObject == null || !(springUserObject instanceof User)) { 
      return model; 
     } 
     User springUser = (User) springUserObject; 
     String userEmailAddress = springUser.getUsername(); 
     com.boro.orange.entity.User signedInUser = userService.getUserByEmailAddress(userEmailAddress); 

     if (signedInUser == null) { 
      String errorMsg = "Failed to find user by email address[" + userEmailAddress + "]"; 
      log.error(errorMsg); 
      model.addAttribute("Error", errorMsg); 
      // TODO add error messages 
     } else { 
      String userFirstName = signedInUser.getFirstName(); 
      String userLastName = signedInUser.getLastName(); 

      model.addAttribute("userFirstName", userFirstName); 
      model.addAttribute("userLastName", userLastName); 
     } 

     return model; 
    } 
} 

root-context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

    <context:annotation-config/> 

    <context:component-scan base-package="com.boro.orange.dao"/> 
    <context:component-scan base-package="com.boro.orange.service"/> 
    <context:component-scan base-package="com.boro.orange.component"/> 
    <context:component-scan base-package="com.boro.orange.controller"/> 

    <import resource="data.xml"/> 

</beans> 
+0

UserService上是否存在Service注释?你可以添加一个Qualifier注释吗? – duffymo

+0

@duffymo,是的,UserService可以从其他@Controller类正常工作。 – Steve

+0

看不到你从这段代码中弄错了什么。 – duffymo

回答

0

你应该只使用一个组件扫描定义。最后一个覆盖以前的定义。

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