1、原因一:缺少ApplicationContext工具类
package com.performancetest.common.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import java.util.Map;
/**
* Spring Context 工具类
*/
@Component
public class SpringContextUtils implements ApplicationContextAware {
public static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
SpringContextUtils.applicationContext = applicationContext;
}
public static Object getBean(String name) {
return applicationContext.getBean(name);
}
public static <T> T getBean(String name, Class<T> requiredType) {
return applicationContext.getBean(name, requiredType);
}
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}
public static boolean isSingleton(String name) {
return applicationContext.isSingleton(name);
}
public static Class<? extends Object> getType(String name) {
return applicationContext.getType(name);
}
}
2、原因二:跨模块getBean
场景:假如有个工程有common模块和admin(启动类模块)模块,获取getBean的类在admin中,则不会报空指针,如果在common模块中,在admin模块中调用,则会报空指针异常。
解决:使用@Import导入getBean方法所在的类。
@SpringBootApplication
@Import(SpringContextHolder.class)
public class AdminApplication {
public static void main(String[] args) {
SpringApplication.run(OathServiceApplication.class, args);
}
}