萌新的我谈不了原理,就发点关于我碰到这个问题是如何去解决的,
前提是我使用了一个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); } }
再通过工具类中的getBean方法获取到Service对象,就可以直接用来调用了,
BoatService boatService = (BoatService) SpringContextUtil.getBean("boatService");
1234567.