【问题标题】:Annotations based configuration hierarchy基于注释的配置层次结构
【发布时间】:2011-03-21 09:26:04
【问题描述】:

我们使用@Configuration 类来进行基于Java 的Spring 配置。我正在尝试设置AnnotationConfigApplicationContext(s) 的层次结构。

它似乎工作。我可以将父上下文中的 bean 自动装配为从子上下文之一创建的 bean 的成员。

但是,我无法将 bean 从父上下文自动连接到 @Configuration 类文件,这非常方便。它们都是空的。

// parent context config
@Configuration
public class ParentContextConfig{
  @Bean parentBeanOne...
  @Bean parentBeanTwo...
}

// child context config
@Configuration
public class ChildContextConfig{
  @Autowired parentBeanOne

  @Bean childBeanOne...
}

// a sample bean
@Component
public class ChildBeanOne{
  @Autowired parentBeanTwo
}

在此示例中,我得到的是正确创建的 parentBeanTwo,而 parentBeanOne 未自动连接 (null) 到配置文件。

我错过了什么?

【问题讨论】:

  • 你是如何建立父子关系的?
  • 我发现如果您将这些 AnnotationConfigApplicationContext 声明为父上下文中的 bean,则自动装配到 ChildContexts 有效。但是我开始得到“循环引用?”相关异常...我无法识别任何循环引用。
  • 我在注册 @configurable 配置类之前通过 setParent(ctx) 设置关系。

标签: java spring


【解决方案1】:

为此,您的子上下文应导入父上下文,例如:

@Configuration
@Import(ParentContextConfig.class)
 public class ChildContextConfig{
    @Autowired parentBeanOne
    ...
  }

有关更多信息,请参阅有关 @Configuration 的 spring 文档。

【讨论】:

    【解决方案2】:

    我认为 Spring 希望您使用标准的 Java 层次结构规则来建立配置对象的父子关系。也就是说,让子配置类扩展父配置类。

    【讨论】:

    • 是的,但这不完全一样。因为整个类层次结构将在同一个 Spring 上下文中。在某些情况下,您希望子上下文访问父上下文,而不是相反,例如使用 servlet 容器等。
    • 这方面有什么新进展吗?这似乎是一项基本配置要求。
    【解决方案3】:

    从 Spring 3.2.2 开始,Spring 现在通过 @ContextHierarchy 支持此功能。 http://docs.spring.io/spring-framework/docs/3.2.x/javadoc-api/org/springframework/test/context/ContextHierarchy.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-23
      • 2017-05-27
      • 1970-01-01
      • 2018-10-22
      • 2015-12-06
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      相关资源
      最近更新 更多