首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动配置中带有集合的构造器参数的Spring DI

自动配置中带有集合的构造器参数的Spring DI
EN

Stack Overflow用户
提问于 2022-06-25 03:33:14
回答 1查看 52关注 0票数 0

我想知道在创建bean时,如何在spring引导中注入一些构造器。

例如,在spring引导自动配置中,JacksonAutoConfiguration文件

代码语言:javascript
复制
    @Bean
    @Scope("prototype")
    @ConditionalOnMissingBean
    Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder(ApplicationContext applicationContext,
            List<Jackson2ObjectMapperBuilderCustomizer> customizers) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.applicationContext(applicationContext);
        customize(builder, customizers);
        return builder;
    }

列表

EN

回答 1

Stack Overflow用户

发布于 2022-11-11 15:05:56

bean定义中的参数并不总是在其他地方定义的“其他bean”,而是可以简单地称为“自由”参数。在这种情况下,bean定义只是一个方法:使用所需的参数调用它,它将返回结果。

因为这个“免费”参数是事先不知道的,所以您必须告诉Spring:

它不能将bean实例化为默认的"singleton",它使用"prototype"

  • it's有关"you“的作用域来使用给定的参数调用方法,通常使用BeanFactory.getBean(Class cl, Object... arguments)

在您所展示的代码中,spring-boot在某个地方会有这样的调用。

代码语言:javascript
复制
beanFactory.getBean(Jackson2ObjectMapperBuilder.class, applicationContext, cusomizerList)

为了能够侦听Jackson2ObjectMapperBuilder bean,它将注意到:

特定的application)

  • and (在Spring 中可能有多个“自定义器”),可能允许以某种方式配置杰克逊映射器.

通过这种方式,您可以获得一个bean,该bean可以使用仅在运行时可用的参数构建。在本例中,这在“配置”运行时非常有用,但它是在您自己的应用程序中构建“智能bean”的一种非常强大的方法。

“春天的邪恶部分”注记

Spring的默认行为是构建'singleton‘,也就是@Service bean。多线程应用程序中的单例bean需要没有字段才是线程安全的。

这给一个完全的“过程”设计带来了失败,它通常会破坏正确的面向对象方法的所有优点(这种方法需要字段来管理内部状态,当然还需要提供更高的抽象级别)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72751072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档