我看到一些奇怪的行为,我希望这里的人能对此问题有所启发。
让我开始描述我的设置。首先,一个简单的数据对象
public class Apple {
private String name;
public Apple withName(String name) {
this.name = name;
return this;
}
public String getName() {
return name;
}
}
还有一个测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={TestConfig.class})
public class AppleTest {
@Autowired private Apple apples;
@Test
public void simpleTest() {
System.out.println("OBJ: "+apples);
}
}
配置如下
@Configuration
public interface ConfigInterface {
public Apple getApple();
}
有实现类
@Configuration
@Import(AbstractTestConfig.class)
public class TestConfig implements ConfigInterface {
public Apple getApple() {
return new Apple().withName("Granny apples");
}
}
随着配置依赖...
@Configuration
public class AbstractTestConfig {
@Autowired ConfigInterface conf;
@Bean Apple myTestApple() {
return conf.getApple();
}
}
所有这些都很好。我运行测试,看到预期的输出。但随后,我将 Spanner 扔了进去,并修改了AbstractTestConfig,使其看起来如下。
@Configuration
public class AbstractTestConfig {
@Autowired ConfigInterface conf;
@Bean Apple myTestApple() {
return conf.getApple();
}
// NEW CODE
@Bean CustomScopeConfigurer scopeConfigurer() {
return new CustomScopeConfigurer();
}
}
当需要构造
@Autowired
bean时,conf
对象Apple
突然为空。更奇怪的是,如果我将
CustomScopeConfigurer
bean移到TestConfig
类,那么它将起作用。我对范围或
CustomScopeConfigurer
对象有什么不了解的地方吗? 最佳答案
从Spring @Bean javadoc复制:
@Bean
public static PropertyPlaceholderConfigurer ppc() {
// instantiate, configure and return ppc ...
}