java的nullpointerexception空指针异常,关于使用了timer定时导致service调用问题

萌新的我谈不了原理,就发点关于我碰到这个问题是如何去解决的,

前提是我使用了一个timer的计时器,并且调用了另外一个类中的方法(不知道这个有没有影响),

总的来说就是调用service时报了空指针,错误信息差不了多少大概是这样的

java.lang.NullPointerException
at java.util.TimerThread.mainLoop(Timer.java:555)  at java.util.TimerThread.

这个问题网上发出来的帖子还是蛮少的,但还是有多多少少的资料

总的来说就是通过@autowired进入的service无法调用

@Autowired
    private BoatService boatService;

得spring容器中获取bean来使用

由于是springboot构建的项目,通过applicationcontext.xml中获取好像是不可能的,

下面有一个封装过的SpringContextUtil是可以直接用来getBean,直接拷入就可以使用,

package com.example.zsxtcode.SYS_TOOL;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringContextUtil  implements ApplicationContextAware {

    /**
     * 应用环境
     */
    private static ApplicationContext applicationContext;


    /**
     *  设置环境
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        SpringContextUtil.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 获取对象
     */
    public static Object getBean(String beanId) throws BeansException {
        return applicationContext.getBean(beanId);
    }
}
SpringContextUtil

再通过工具类中的getBean方法获取到Service对象,就可以直接用来调用了,

BoatService boatService = (BoatService) SpringContextUtil.getBean("boatService");

猜你喜欢

转载自www.cnblogs.com/Crush123/p/12107646.html