Search code examples
javaspringspring-boot

What is the difference between @SpringBootConfiguration vs @Configuration?


What is the difference between @SpringBootConfiguration and @Configuration? I cannot find much details on it.


Solution

  • As per Springboot docs (hierarchy below), @Configuration is a part of @SpringBootConfiguration which ultimately has @SpringBootApplication annotation.

    @SpringBootApplication
    -------> @SpringBootConfiguration
           -------> @Configuration
    

    @SpringBootApplication

    Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(excludeFilters = {
            @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
            @Filter(type = FilterType.CUSTOM,
                    classes = AutoConfigurationExcludeFilter.class) })
    public @interface SpringBootApplication {
    ...}
    

    @SpringBootConfiguration

    @Target(ElementType.TYPE)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Configuration
    public @interface SpringBootConfiguration {
    
    }
    

    @Configuration

        @Target(ElementType.TYPE)
        @Retention(RetentionPolicy.RUNTIME)
        @Documented
        @Component
        public @interface Configuration {
    }