Util类调用Service中的方法报空指针异常

Util类调用Service中的方法报空指针异常

参考 原文链接:https://blog.csdn.net/Abby_lxf/article/details/107045853

起因是我想弄一个用户登录校验用户名是否重复的一个Util工具类,但发现在项目启动之后报错了

public class UserCheckUtils {

    @Autowired
    private UserMapper userMapper;

    private static UserCheckUtils userCheckUtils;

    public static boolean checkUsernameExist(String username){
        boolean flag = false;
        Map map = new ConcurrentHashMap();
        map.put("username", username);
        List list = userCheckUtils.userMapper.selectByMap(map);
        if(list.isEmpty()){
            flag = true;
        }
        return flag;
    }
}

原因是 :Service注入失败

解决方法 :

  1. 保证util类当前所在的包在 SpringMVC 配置的扫描路径下
  2. 在工具类上加上 @Component 注解
  3. 使用 @PostConstruct 注解静态化当前工具类
  4. 调用Service时,使用静态化类调用

@PostConstruct注解:好多人以为是Spring提供的。其实是Java自己的注解。

Java中该注解的说明:**@PostConstruct该注解被用来修饰一个非静态的void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。**PostConstruct在构造函数之后执行,init()方法之前执行。通常我们会是在Spring框架中使用到@PostConstruct注解 该注解的方法在整个Bean初始化中的执行顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

实战:在静态方法中调用依赖注入的Bean中的方法。(一般都是这样使用的)

@Component
public class UserCheckUtils {
    @Autowired
    private UserMapper userMapper;

    private static UserCheckUtils userCheckUtils;

    @PostConstruct
    public void init(){
        userCheckUtils = this;
        userCheckUtils.userMapper = this.userMapper;
    }

    public static boolean checkUsernameExist(String username){
        boolean flag = false;
        Map map = new ConcurrentHashMap();
        map.put("username", username);
        List list = userCheckUtils.userMapper.selectByMap(map);
        if(list.isEmpty()){
            flag = true;
        }
        return flag;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值