我有一个简单的项目,我希望从CarDaoImpl::save
运行方法Main::runApp
。我有@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();
}
}
谢谢!
答案 0 :(得分:2)
您可以在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。例如,向@Transactional
中的方法添加Main
或其他面向方面的注释将完全没有效果。
我可能更好的想法是让Main :: runApp的调用者启动应用程序上下文,并通过将Main包含在配置中来使Main成为Spring托管bean。然后,您可以使用ctx.getBean(Main.class)
来检索bean。