2015-06-27 9 views
5

Oto mój komponent, który zawiera userService auto wired. Problem polega na tym, że nie jest zainicjalizowany, zawsze zerowy. Obsługa użytkownika działa dobrze ze sterowników.Wiosenna zmienna @Autowired ma wartość null wewnątrz @Component

Co należy zrobić, aby móc zindywidualizować usługę wewnątrz komponentu?

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

Czy istnieje adnotacja Service na UserService? Czy możesz dodać adnotację Kwalifikatora? – duffymo

+0

@ duffymo, tak, UserService działa dobrze z innych klas @ Controller. – Steve

+0

Nie widzę, co zrobiłeś źle z tego kodu. – duffymo

Odpowiedz

0

Należy używać tylko jedną definicję skanowania komponentów. Ostatni przesłonił poprzednie definicje.

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