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

时间:2015-10-03 17:58:09

标签: java spring spring-java-config

跟进to this question

我也尝试了这个,但是由于没有noargs构造函数(你现在可以用服务/控制器/组件做这个,所以为什么它不能在这里工作?)

@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

1 个答案:

答案 0 :(得分:4)

我完全不认识你的第一个例子,也不知道 的工作地点。

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

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