我看到一些奇怪的行为,我希望这里的人能对此问题有所启发。

让我开始描述我的设置。首先,一个简单的数据对象

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 ...
 }

09-30 11:04