我在关于springkafkabean声明的教程和github项目中看到过这种模式,我不明白为什么直接调用bean方法而不是autowire,
例如,
在https://www.baeldung.com/spring-kafka 第4节:
@Configuration
public class KafkaProducerConfig {
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
}
为什么要调用方法producerfactory?
这样申报不是更好吗?
@Configuration
public class KafkaProducerConfig {
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate(ProducerFactory<String, String> producerFactory) {
return new KafkaTemplate<>(producerFactory);
}
}
似乎创建了两个defaultkafkaproducerfactory示例,而不是一个。我错过了什么?
1条答案
按热度按时间hvvq6cgz1#
不,没有创建该对象的两个示例,因为
producerFactory()
由代理BeanFactory
正是为了这个案子。尽管我同意注入式变体更适合现代方法,尤其是当我们在启动时追求性能提升时。
看到了吗
@Configuration.proxyBeanMethods
Java文档: