自动装配对象为空

时间:2018-09-17 11:16:18

标签: spring spring-mvc

Logger logger = LoggerFactory.getLogger(CustomWebSecurityExpressionRoot.class);

    @Autowired
    private IUserService userService;

    public CustomWebSecurityExpressionRoot(Authentication a, FilterInvocation fi) {
        super(a, fi);
    }

    public boolean isOwner(Integer id) {
        String username = ((UserDetails) getPrincipal()).getUsername();
        User user = new User();
        if (userService == null) {
            logger.debug("USER SERVICE NULL");
        }
        try {
            user = userService.findByUsername(username);
        } catch (NullPointerException e) {
            e.printStackTrace();
            logger.debug("NULL");
        }
        return id == user.getId();
    }

例外:

java.lang.NullPointerException
    at waterfall.model.User.getId(User.java:62)
    at waterfall.config.CustomWebSecurityExpressionRoot.isOwner(CustomWebSecurityExpressionRoot.java:37)

在其他类中,例如 controller ,它可以正常工作,但在userService上面的 class 中为null。我不知道为什么它为空。是什么导致我的问题?

2 个答案:

答案 0 :(得分:0)

自动装配仅适用于弹簧组件,例如ServiceController或组件。
您可以通过添加@Component并扫描给定的路径来解决问题。但是,您应该查找此问题的后果。

答案 1 :(得分:0)

我只能找到两种无法自动布线的可能性:

1)您的CustomWebSecurityExpressionRoot尚未由Spring创建(您自己实例化了吗?)。

2)您的CustomWebSecurityExpressionRoot是最终的。