我有一个简单的项目,我想从 Main::runApp
运行方法 CarDaoImpl::save
。我有带有 @Configration
注释的类,但我的 @Autowired
字段为空并且我收到 NullPointerException,因为配置类未加载,我该如何解决这个问题?
public class Main {
@Autowired
private CarDao carDao;
//psvm(){}
public void runApp(){
carDao.save(new Car()); //carDao is null
}
}
配置类
@Configuration
public class BeanInit {
@Bean
public CarDao carDao(){
return new CarDaoImpl();
}
}
谢谢!
最佳答案
您可以向 Main 添加一个构造函数,在其中创建一个新的 AnnotationConfigApplicationContext
,然后使用该上下文来启动该对象。
public class Main {
@Autowired
private CarDao carDao;
public Main() {
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanInit.class);
ctx.getAutowireCapableBeanFactory().autowireBean(this);
}
//psvm(){}
public void runApp(){
carDao.save(new Car()); //carDao is null
}
}
请注意,这不会使 Main
成为 Spring 管理的 bean。例如,向 Main
中的方法添加 @Transactional
或其他面向方面的注释将完全没有效果。
让 Main::runApp 的调用者启动应用程序上下文并通过将 Main 包含在配置中让 Main 成为 spring 管理的 bean 可能是一个更好的主意。然后您可以使用 ctx.getBean(Main.class)
来检索 bean。
关于java - annotation - 如何加载 Spring 配置类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36377314/