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

原文链接
原因:Service注入失败

一、保证util类当前所在的包在springmvc配置的扫描路径下

二、操作

在工具类上加上@Component注解
使用@PostConstruct注解静态化当前工具类
调用Service时,使用静态化类调用
@PostConstruct注解:好多人以为是Spring提供的。其实是Java自己的注解。

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

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

package com.example.studySpringBoot.util;
 
import com.example.studySpringBoot.service.MyMethorClassService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import javax.annotation.PostConstruct;
 
@Component
public class MyUtils {
 
    private static MyUtils staticInstance = new MyUtils();
 
    @Autowired
    private MyMethorClassService myService;
 
    @PostConstruct
    public void init(){
        staticInstance.myService = myService;
    }
 
    public static Integer invokeBean(){
        return staticInstance.myService.add(10,20);
    }
}

贴上一个自己写的实战栗子:
首先我的util中需要调用service中的方法,但是一直在报NullPointer的错误。
使用上面的方法就能避免报上面的错误啦!!!!!!!!!!!!!!
源码:(贴上源码方便复制哦!!!!!!!!!)

@Component
public class Oauth2LoginUtils {

    @Resource
    private UserMapper userMapper;

    @Resource
    private TokenUtils tokenUtils;

    private static Oauth2LoginUtils oauth2LoginUtils;

    @PostConstruct
    public void init(){
        oauth2LoginUtils = this;
    }


    /**
     * 通过第三方进行登录后,注册用户信息
     * @param loginUserVo
     * @return
     */
    public LoginUserVo checkOauth2Login(LoginUserVo loginUserVo){
        String userAccount = loginUserVo.getUserAccount();
        String name = loginUserVo.getUserName();
        String userAvatar = loginUserVo.getUserAvatar();
        User user = oauth2LoginUtils.userMapper.selectOne(new QueryWrapper<User>().eq("userAccount", userAccount));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
删除数组的数据后,可以使用Java内置的排序方法来对数组进行排序,以避免出现指针异常。具体做法如下: 1. 使用Java内置的Arrays类的sort方法对数组进行排序。 2. 在删除数组的数据之前,先判断该数据是否存在于数组。 3. 如果该数据存在于数组,则使用Java内置的System.arraycopy方法将该数据的后面的所有数据向前移动一位。 4. 最后将数组的最后一位设置为null。 示例代码如下: ``` import java.util.Arrays; public class ArrayDemo { public static void main(String[] args) { String[] arr = {"A", "B", "C", "D", "E"}; String target = "C"; int index = -1; for (int i = 0; i < arr.length; i++) { if (arr[i].equals(target)) { index = i; break; } } if (index != -1) { System.arraycopy(arr, index + 1, arr, index, arr.length - index - 1); arr[arr.length - 1] = null; Arrays.sort(arr); } System.out.println(Arrays.toString(arr)); } } ``` 在上述代码,首先定义一个字符串数组arr,其包含A、B、C、D、E五个元素。然后定义一个要删除的目标字符串target,并使用for循环遍历整个数组,如果找到与目标字符串相等的元素,则记录该元素的下标,并退出循环。接着,判断是否找到目标字符串,如果找到,则使用System.arraycopy方法将目标字符串后面的所有元素向前移动一位,并将数组的最后一位设置为null。最后,使用Arrays.sort方法对数组进行排序,并输出排序后的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值