获取Spring应用程序上下文

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

假设主类启动并初始化了应用程序上下文,它是否需要通过调用堆栈将其向下传递给需要它的任何类,还是有一种方法可以让一个类请求先前创建的上下文?(我认为必须是单身人士?)


噜噜哒
浏览 778回答 3
3回答

慕丝7291255

如果需要访问容器的对象是容器中的Bean,则只需实现BeanFactoryAware或ApplicationContextAware接口。如果容器外部的对象需要访问该容器,那么我已经对弹簧容器使用了标准的GoF单例模式。这样,您的应用程序中只有一个单例,其余都是容器中的所有单例bean。

沧海一幻觉

您可以实现ApplicationContextAware或只使用@Autowired:public class SpringBean {&nbsp; @Autowired&nbsp; private ApplicationContext appContext;}SpringBean将ApplicationContext注入,在其中实例化此bean。例如,如果您的Web应用程序具有相当标准的上下文层次结构:main application context <- (child) MVC context并SpringBean在主上下文中声明,将注入主上下文;否则,如果在MVC上下文中声明,则会注入MVC上下文。

白衣染霜花

我相信您可以使用SingletonBeanFactoryLocator。beanRefFactory.xml文件将保存实际的applicationContext,它将像这样:<bean id="mainContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">&nbsp; &nbsp; &nbsp;<constructor-arg>&nbsp; &nbsp; &nbsp; &nbsp; <list>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <value>../applicationContext.xml</value>&nbsp; &nbsp; &nbsp; &nbsp; </list>&nbsp; &nbsp; &nbsp;</constructor-arg>&nbsp;</bean>从任何地方从applicationcontext获取bean的代码都是这样的:BeanFactoryLocator bfl = SingletonBeanFactoryLocator.getInstance();BeanFactoryReference bf = bfl.useBeanFactory("mainContext");SomeService someService = (SomeService) bf.getFactory().getBean("someService");Spring团队不鼓励使用此类和yadayada,但在使用该类的地方它非常适合我。
打开App,查看更多内容
随时随地看视频慕课网APP