为了账号安全,请及时绑定邮箱和手机立即绑定

获取Spring应用程序上下文

/ 猿问

获取Spring应用程序上下文

噜噜哒 2019-10-05 14:54:39

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

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


查看完整描述

3 回答

?
慕丝7291255

如果需要访问容器的对象是容器中的Bean,则只需实现BeanFactoryAware或ApplicationContextAware接口。


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


查看完整回答
反对 回复 2019-10-05
?
沧海一幻觉

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


public class SpringBean {

  @Autowired

  private ApplicationContext appContext;

}

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


main application context <- (child) MVC context

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


查看完整回答
反对 回复 2019-10-05
?
白衣染霜花

我相信您可以使用SingletonBeanFactoryLocator。beanRefFactory.xml文件将保存实际的applicationContext,它将像这样:


<bean id="mainContext" class="org.springframework.context.support.ClassPathXmlApplicationContext">

     <constructor-arg>

        <list>

            <value>../applicationContext.xml</value>

        </list>

     </constructor-arg>

 </bean>

从任何地方从applicationcontext获取bean的代码都是这样的:


BeanFactoryLocator bfl = SingletonBeanFactoryLocator.getInstance();

BeanFactoryReference bf = bfl.useBeanFactory("mainContext");

SomeService someService = (SomeService) bf.getFactory().getBean("someService");

Spring团队不鼓励使用此类和yadayada,但在使用该类的地方它非常适合我。


查看完整回答
反对 回复 2019-10-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信