@SpringBootApplication
public class XuechengContentServiceApplication {
@Autowired
static UserService userService;
public static void main(String[] args) {
SpringApplication.run(XuechengContentServiceApplication.class, args);
userService.getUser();
}
}
由于因为Spring的依赖注入是在实例级别进行的,它不会处理静态成员。
Spring框架使用依赖注入(DI)来管理Bean的生命周期和依赖关系。在Spring中,Bean的注入通常是通过构造函数、字段或者方法进行的,这些操作都是在实例化对象之后进行的。然而,静态代码块或静态方法是在类加载时执行的,此时Spring容器可能还没有完成Bean的初始化工作,因此尝试在静态上下文中访问未初始化的Bean会导致空指针异常。
解决:通过(org.springframework.context.annotation.AnnotationConfigApplicationContext)ApplicationContext.getBean获取,写一个工具类MyBeanUtil实现ApplicationContextAware来获取ApplicationContext的实例。MyBeanUtil.getBean("类名首字母小写")可以获取bean即MyBean.getBean("userServiceImpl")
@Component
public class MyBeanUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
MyBeanUtil.applicationContext = applicationContext;
}
public static <T> T getBean(String bean) {
return (T) applicationContext.getBean(bean);
}
}