我有一个应用程序,必须在其中使用Spring根据OSGi捆绑包内的某些业务条件来加载bean。这个bean不是要导出的,而是用于inisde我的包中的计算。基本上,我有一个实际的服务组件,该组件已导出,并且必须在内部使用此Spring Bean。但...
有什么办法吗?
最佳答案
您不需要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());
}
}