Skip to content

Beans created with BeanRegistrar or GenericApplicationContext in initializer do not honor default allow-bean-definition-overriding setting #36648

@hajdamak

Description

@hajdamak

Although default setting in Spring Boot for allowing bean overriding (spring.main.allow-bean-definition-overriding) is false, beans created with BeanRegistrar or GenericApplicationContext in initializer do no honor it.
So following will not fail:

fun main(args: Array<String>) {
    SpringApplicationBuilder(ExampleApp::class.java)
        .run {
            initializers(
                ApplicationContextInitializer<GenericApplicationContext> {
                    it.register(ExampleRegistrar())
                }
            )
            build()
        }
        .run()
}

class ExampleApp

class ExampleRegistrar :
    BeanRegistrarDsl({
        registerBean("example") { ExampleBean() }
        registerBean("example") { ExampleBean() }
    })

class ExampleBean

same with beans registered using GenericApplicationContext, for example:

ApplicationContextInitializer<GenericApplicationContext> {
    it.registerBean("example", ExampleBean::class.java, Supplier { ExampleBean() })
    it.registerBean("example", ExampleBean::class.java, Supplier { ExampleBean() })
}

Setting setAllowBeanDefinitionOverriding to false in GenericApplicationContext will cause it to fail:

ApplicationContextInitializer<GenericApplicationContext> {
    it.setAllowBeanDefinitionOverriding(false)
    ...
}

It will also fail when importing ExampleRegistrar using @Import annotation instead of register function in GenericApplicationContext:

@Import(ExampleRegistrar::class)
class ExampleApp

Spring Boot 4.0.3

Metadata

Metadata

Assignees

No one assigned

    Labels

    in: coreIssues in core modules (aop, beans, core, context, expression)status: waiting-for-triageAn issue we've not yet triaged or decided on

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions