How do I use a Spring bean inside an OSGi bundle?

好久不见. 提交于 2019-11-26 23:31:21

问题


I have an application where I have to use Spring to load a bean based on some business conditions inside an OSGi bundle. This bean is not meant for export and is used for calculation inisde my bundle. Basically I have an actual service component, which is exported, and it has to use this Spring bean internally. But...

  1. When I use Spring DM the extender loads the application context in a seperate thread. How to access the context file inside my bundle?
  2. How to make sure extender thread finshes loading application context so that i can use it in my bundle?
  3. I don't want to export the application context as services as Spring DM does, as it's only used inside my bundle for internal purposes.

Is there any way to do this?


回答1:


You don't need Spring DM for what you are trying to accomplish.

It sounds like what you want to do is actually provide access to your context inside of your bundle and have some class do lookups via ctx.getBean(). If this is the case, just create the context in your bundle manually like you would if you were not in OSGi and make the calls. No Spring DM involved at all.

The one issue here is that you have to extend ClassPathXmlApplicationContext to provide the bundles classloader, as it will use the thread context classloader otherwise.

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


来源:https://stackoverflow.com/questions/8039931/how-do-i-use-a-spring-bean-inside-an-osgi-bundle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!