5

Here is my component that contains userService auto wired. The problem is that is not initialized, always null. User service works fine from Controllers.

What should be done to autowire service inside of component?

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>
Roman C
  • 49,761
  • 33
  • 66
  • 176
Steve
  • 415
  • 2
  • 8
  • 24

1 Answers1

0

You should use only one definition for component scan. The last one overrides previous definitions.

<context:component-scan base-package="com.boro.orange"/>
Roman C
  • 49,761
  • 33
  • 66
  • 176