为什么这些形式的 Autowire 不能在 @Configuration 中工作

Why don't these forms of Autowire work in an @Configuration

跟进

我也试过这个,但是没有 noargs 构造函数就爆炸了(你现在可以用 services/controllers/components 来做,为什么它在这里不起作用?)

@Configuration
class MyConfig {

    @Autowired
    MyConfig( final ObjectMapper mapper ) {
       ...
    }
}

然而这有效

@Configuration // or @Service or some bean
class SomeClass ... {

    @Autowired
    private ObjectMapper objectMapper;

    @PostConstruct
    private void configureObjectMapper() {
        objectMapper.disable( SerializationFeature.WRITE_DATES_AS_TIMESTAMPS );
    }

}

为什么 @Configuration 不像其他 spring 那样管理 类?

我根本不认识你的第一个例子,也不知道它在哪里工作。

第二个示例,构造函数注入,并不专门用于配置 classes,因为 Spring 在开始构建 bean 之前进行了大量的分析和解决依赖关系图的工作。配置 classes 实际上是代理的,因此它们的 @Bean 方法可以进行自我调用并仍然获得单例实例(或任何适当的范围)。因为配置 class 可以提供它自己依赖的 beans,所以 Spring 需要一个无参数的构造函数,以便它可以一次构建一个实例。

我的首选替代方案是在我的 @Bean 方法上使用参数注入,这不需要特殊注释。