Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在OSGi包中使用Springbean?_Java_Spring_Osgi_Spring Dm - Fatal编程技术网

Java 如何在OSGi包中使用Springbean?

Java 如何在OSGi包中使用Springbean?,java,spring,osgi,spring-dm,Java,Spring,Osgi,Spring Dm,我有一个应用程序,在这个应用程序中,我必须根据OSGi包中的一些业务条件使用Spring来加载bean。此bean不用于导出,而是用于在我的包中进行计算。基本上我有一个实际的服务组件,它是导出的,它必须在内部使用这个Springbean。但是 当我使用SpringDM时,扩展器在一个单独的线程中加载应用程序上下文。如何访问捆绑包中的上下文文件 如何确保extender线程找到加载的应用程序上下文,以便我可以在包中使用它 我不想像SpringDM那样将应用程序上下文导出为服务,因为它只在包中用于内

我有一个应用程序,在这个应用程序中,我必须根据OSGi包中的一些业务条件使用Spring来加载bean。此bean不用于导出,而是用于在我的包中进行计算。基本上我有一个实际的服务组件,它是导出的,它必须在内部使用这个Springbean。但是

  • 当我使用SpringDM时,扩展器在一个单独的线程中加载应用程序上下文。如何访问捆绑包中的上下文文件
  • 如何确保extender线程找到加载的应用程序上下文,以便我可以在包中使用它
  • 我不想像SpringDM那样将应用程序上下文导出为服务,因为它只在包中用于内部目的

  • 有没有办法做到这一点

    您不需要Spring DM来完成您想要完成的任务

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

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

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

    如果您在问题中添加语言标记(即Java),您的问题可能会得到更好的关注。你可能还想清理你的拼写、语法和大写字母;你的问题会被更严肃地对待。我必须添加以下内容以使其生效:reader.setBeanClassLoader(properClassLoader);这就是getClassLoader()方法的用途,正如前面提到的,您必须提供bundle类加载器。