获取弹簧应用程序上下文

有没有办法在Spring应用程序中静态/全局地请求应用程序上下文的副本?

假设主类启动并初始化应用程序上下文,它是否需要通过调用堆栈将其传递给任何需要它的类,或者是否有办法让类请求以前创建的上下文?(我假设这必须是单例?


答案 1

如果需要访问容器的对象是容器中的 Bean,只需实现 BeanFactoryAwareApplicationContextAware 接口即可。

如果容器外部的对象需要访问容器,我对弹簧容器使用了标准的 GoF 单例模式。这样,您的应用程序中只有一个单例,其余的都是容器中的单例 Bean。


答案 2

您可以实现或仅使用:ApplicationContextAware@Autowired

public class SpringBean {
  @Autowired
  private ApplicationContext appContext;
}

SpringBean将注入,其中此 Bean 被实例化。例如,如果您的 Web 应用程序具有非常标准的上下文层次结构:ApplicationContext

main application context <- (child) MVC context

并在主上下文中声明,它将注入主上下文;否则,如果在 MVC 上下文中声明它,它将注入 MVC 上下文。SpringBean


推荐