我看到了一些奇怪的行为,我希望这里有人可以对这个问题有所了解。
让我从描述我的设置开始。一、简单的数据对象
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();
}
}
所有这一切都很好。我运行测试,我看到了我期望的输出。但随后我将扳手扔进方向盘并修改 AbstractTestConfig 如下所示。
@Configuration
public class AbstractTestConfig {
@Autowired ConfigInterface conf;
@Bean Apple myTestApple() {
return conf.getApple();
}
// NEW CODE
@Bean CustomScopeConfigurer scopeConfigurer() {
return new CustomScopeConfigurer();
}
}
突然间,当需要构造bean时,该@Autowired
对象为空。conf
Apple
更奇怪的是,如果我将CustomScopeConfigurer
bean 移到TestConfig
课堂上,那么它就可以工作。
CustomScopeConfigurer
关于范围或对象,我有什么不知道的吗?