为什么这些形式的 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
方法上使用参数注入,这不需要特殊注释。
跟进
我也试过这个,但是没有 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
方法上使用参数注入,这不需要特殊注释。