【问题标题】:Java - Spring: dependency injection across bean factories in SingletonBeanFactoryLocator?Java - Spring:SingletonBeanFactoryLocator 中跨 bean 工厂的依赖注入?
【发布时间】:2013-01-15 14:33:20
【问题描述】:

我有以下场景:

1) 两个 xml 配置文件,例如 foo.xmlbar.xml。它们包含名称为 fooFactorybarFactoryClassPathXmlApplicationContext bean。每个 bean 依次通过其构造函数获得自己的 xml 配置文件,

2) 客户端代码使用SingletonBeanFactoryLocator 和方法getInstanceuseBean 来获取这些工厂。例如。 SingletonBeanFactoryLocator.getInstance("classpath:foo.xml").useBeanFactory("fooFactory");

要求:barFactory中的一些bean需要访问fooFactory中的一些bean。

目前的解决方案是通过SingletonBeanFactoryLocator.getInstance("classpath:foo.xml").useBeanFactory("fooFactory");获取对fooFactory的引用,并使用getBean获取必要的bean。

问题:是否可以将来自fooFactory 的bean 注入来自barFactory 的bean,所以barFactory 中的bean 会自动获取这些依赖关系?

【问题讨论】:

  • 正在维护 2 个 ClassPathXmlApplicationContexts?

标签: java spring


【解决方案1】:

为什么没有“通用”应用程序上下文 xml。

在此文件中,您可以定义将在 foo 和 bar 中使用的 bean。然后,您可以将这个通用 xml 导入到两个应用程序上下文中。

这种方法会创建两次在公共 xml 中定义的那些 bean,但这可能是也可能不是问题。如果您想共享相同的实例,您可以将公共 bean 创建为单例。

【讨论】:

  • 即使我们将它们创建为单例,它们的单例也仅适用于定义它们的上下文,rt?在这种情况下我们有两个appContext,那么即使是单例,它们不会被创建两次吗?
  • 好吧,它们仍然会在同一个 JVM 中执行,所以如果你在上下文文件中使用工厂方法创建它们,它应该返回相同的实例。
  • 哦,好吧,我以为你的意思是单例范围的 Spring bean。
【解决方案2】:

我最终在同一个 .xml 中定义了这些工厂并将它们链接起来。然后我将 fooFactory bean 正常注入 barFactory bean。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    相关资源
    最近更新 更多