我有一个应用程序,必须在其中使用Spring根据OSGi捆绑包内的某些业务条件来加载bean。这个bean不是要导出的,而是用于inisde我的包中的计算。基本上,我有一个实际的服务组件,该组件已导出,并且必须在内部使用此Spring Bean。但...

  • 当我使用Spring DM时,扩展程序在单独的线程中加载应用程序上下文。如何访问我包中的上下文文件?
  • 如何确保扩展程序线程在加载应用程序上下文时可以使用,以便可以在捆绑包中使用它?
  • 我不想像Spring DM一样将应用程序上下文导出为服务,因为它仅在我的捆绑包中用于内部用途。

  • 有什么办法吗?

    最佳答案

    您不需要Spring DM即可完成所要完成的工作。

    听起来您想要做的实际上是提供对包内上下文的访问,并通过ctx.getBean()进行一些类查找。如果是这种情况,只需在捆绑软件中手动创建上下文,就像您不在OSGi中一样,并进行调用。完全不涉及Spring DM。

    这里的一个问题是,您必须扩展ClassPathXmlApplicationContext来提供捆绑软件类加载器,否则它将使用线程上下文类加载器。

    ApplicationContext ctx = new ClassPathXmlApplicationContext(myCtxPath)
    {
        protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader)
        {
            super.initBeanDefinitionReader(reader);
            reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
            reader.setBeanClassLoader(getClassLoader());
        }
    }
    

    08-18 20:04
    查看更多