在Spring框架中,AnnotationConfigApplicationContext
或任何其他 ApplicationContext
实现都需要被“刷新”(refreshed)以便初始化配置并创建管理的bean。在你的代码中,你创建了 AnnotationConfigApplicationContext
的一个实例,但是没有调用它的 refresh()
方法。
当你调用 getBean()
之前,必须先调用 refresh()
方法来确保所有的bean定义已经被解析和实例化。这是因为在 refresh()
被调用前,bean工厂还没有准备好处理bean请求。
你的代码应该如下所示:
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
// 注册一个单例bean
Object o = new Object();
applicationContext.getBeanFactory().registerSingleton("obj", o);
// 刷新上下文
applicationContext.refresh();
// 现在可以获取bean了
System.out.println(applicationContext.getBean("obj"));
// 最后记得关闭上下文
applicationContext.close();
}
请注意,通常我们不会直接调用 registerSingleton
和 refresh
方法。更常见的做法是通过配置类或XML配置文件来定义bean,并将这些配置传递给 AnnotationConfigApplicationContext
或 XmlWebApplicationContext
等。
最后,在程序结束或不再需要此上下文时,调用 close()
方法以释放资源。这在使用try-with-resources语句或在finally块中完成是最佳实践。如果忘记关闭上下文,可能会导致资源泄露。