Spring @Autowired变量在@Component中为null

时间:2015-06-27 17:53:47

标签: java spring autowired

这是我的组件包含userService自动连线。问题是没有初始化,总是为空。用户服务可以从控制器中正常工作。

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

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>

1 个答案:

答案 0 :(得分:0)

您应该只使用一个定义进行组件扫描。最后一个重写先前的定义。

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