gpt4 book ai didi

spring - 通过@import 和@ContextConfiguration 对配置进行分组有什么区别?

转载 作者:行者123 更新时间:2023-12-05 04:15:38 27 4
gpt4 key购买 nike

下面两种加载配置的方式有什么区别。

  1. 在测试类中通过@ContextConfiguration加载两个独立的配置类。

  2. 将一个配置导入另一个配置并将单个配置加载到测试类中的@ContextConfiguration。

我认为两者都将配置推送到公共(public)池中。但我看到了不同之处。我有两个全局拦截器,一个在 java.config 中,另一个在 xml.config 中。如果我按照上面的第二种方法,两个拦截器都在加载。

但如果我采用第一种方法,则根据我是调用基于 xml 的网关还是基于 java 的网关,只会加载一个拦截器。

https://github.com/manojp1988/Learning/tree/JavaDSL/Sample1

@RunWith(SpringJUnit4ClassRunner.class)
@ContextHierarchy({
@ContextConfiguration(locations = {"/applicationContext.xml"}),
@ContextConfiguration(classes = SpringConfiguration.class),
})
public class SampleTest {}

更新:

@Bean
@GlobalChannelInterceptor(patterns = "*_EL*", order=3)
public WireTap wireTap() {

最佳答案

如果您遵循方法 #1,两个拦截器实际上都在加载...只是在不同 ApplicationContexts 中。

@ContextHierarchy 指示 Spring TestContext Framework 加载上下文的层次结构

因此,您拥有的两个配置设置在上下文方面并不相同。当您使用 @ContextHierarchy 时,XML 组件只能看到 XML ApplicationContext 中定义的其他 bean(即层次结构的顶层);而 Java DSL 组件可以看到所有组件(即那些在 Java Config 中配置的在 XML 中配置的组件,因为 XML 上下文是 Java Config 上下文的父级 ).

我相信这实际上是你想要的......

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)
public class SampleTest { /* ... */ }
@Configuration
@ComponentScan(basePackages = "com.model")
@EnableIntegration
@IntegrationComponentScan
@ImportResource("/applicationContext.xml")
public class SpringConfiguration { /* ... */ }

如果您不希望 SpringConfiguration 导入 XML 配置,您也可以使用以下方法来实现相同的行为:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class SampleTest {

@Configuration
@Import(SpringConfiguration.class)
@ImportResource("/applicationContext.xml")
static class Config {}

/* ... */

}

问候,

Sam(Spring TestContext Framework 的作者)

关于spring - 通过@import 和@ContextConfiguration 对配置进行分组有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31631890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com