springboot启动类中使用context.getBean()时,context报错
时间: 2024-01-24 14:17:37 浏览: 201
springboot 使用上下文获取bean
当在Spring Boot的启动类中使用`context.getBean()`方法时,通常会出现`NullPointerException`或者`NoSuchBeanDefinitionException`等异常。这是因为Spring Boot的启动类中的上下文`ApplicationContext`还没有初始化完成,所以在调用`getBean()`方法时会报错。
为了解决这个问题,可以使用`@Autowired`注解或者构造函数注入的方式来获取需要的bean,这样可以确保在启动类中获取bean时,上下文已经初始化完成。例如:
```java
@SpringBootApplication
public class MyApp {
@Autowired
private MyBean myBean;
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
// ...
}
```
或者:
```java
@SpringBootApplication
public class MyApp {
private final MyBean myBean;
public MyApp(MyBean myBean) {
this.myBean = myBean;
}
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
// ...
}
```
另外,如果你非要在启动类中使用`context.getBean()`方法,也可以通过`ApplicationRunner`或者`CommandLineRunner`接口来延迟执行获取bean的操作,如下所示:
```java
@SpringBootApplication
public class MyApp implements ApplicationRunner {
private ApplicationContext context;
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
MyBean myBean = context.getBean(MyBean.class);
// use myBean
}
@Autowired
public void setContext(ApplicationContext context) {
this.context = context;
}
}
```
阅读全文