1.

Is it possible to have a Spring Boot Application without using @SpringBootApplication annotation? If yes, explain why would you do that?

Answer»

@SpringBootApplication annotation is not mandatory, it is possible to have a Spring boot based APPLICATION without using it.

You will do that when you don’t want to go with implicit features provided by @SpringBootApplication annotation.

SpringBootApplication annotation is defined as :

@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 {

Let’s say you don’t want to use component scan in your application but would like to go with enabling feature that executes the code for DEPENDENCIES with default configuration (@EnableAutoConfiguration) 

You can probably define your class as :

@Configuration @EnableAutoConfiguration @Import({ MyConfiguration1.class, MyConfiguration2.class,MyConfiguration3.class }) public class MySpringBootApplication { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication.class, args); } }

Here MySpringBootApplication is Spring boot based Application however it does not go with component scan instead it looks for specific configuration classes and import them to set up the configuration.

Another Application may use the following configuration :

@Configuration @ComponentScan(basePackages = "com.example.demo.components") public class MySpringBootApplication2 { public static void main(String[] args) { SpringApplication.run(MySpringBootApplication2.class, args); } }

Here application wanted to AVOID using @EnableAutoConfiguration however it STILL wanted to components can feature hence MySpringBootApplication2 class definition includes that.



Discussion

No Comment Found