萌新的我谈不了原理,就发点关于我碰到这个问题是如何去解决的,
前提是我使用了一个timer的计时器,并且调用了另外一个类中的方法(不知道这个有没有影响),
总的来说就是调用service时报了空指针,错误信息差不了多少大概是这样的
java.lang.NullPointerException
at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.
这个问题网上发出来的帖子还是蛮少的,但还是有多多少少的资料
总的来说就是通过@autowired进入的service无法调用
@Autowiredprivate BoatService boatService;
得spring容器中获取bean来使用
由于是springboot构建的项目,通过applicationcontext.xml中获取好像是不可能的,
下面有一个封装过的SpringContextUtil是可以直接用来getBean,直接拷入就可以使用,
packagecom.example.zsxtcode.SYS_TOOL;importorg.springframework.beans.BeansException;importorg.springframework.context.ApplicationContext;importorg.springframework.context.ApplicationContextAware;importorg.springframework.stereotype.Component;
@Componentpublic class SpringContextUtil implementsApplicationContextAware {/*** 应用环境*/
private staticApplicationContext applicationContext;/*** 设置环境*/@Overridepublic voidsetApplicationContext(ApplicationContext applicationContext)throwsBeansException {
SpringContextUtil.applicationContext=applicationContext;
}public staticApplicationContext getApplicationContext() {returnapplicationContext;
}/*** 获取对象*/
public static Object getBean(String beanId) throwsBeansException {returnapplicationContext.getBean(beanId);
}
}
SpringContextUtil
再通过工具类中的getBean方法获取到Service对象,就可以直接用来调用了,
BoatService boatService = (BoatService) SpringContextUtil.getBean("boatService");
1234567.