1. XXXApplication.java
스프링부트는 main 메소드가 선언된 클래스를 기준으로 실행됩니다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class BamduleApplication {
public static void main(String[] args) {
SpringApplication.run(BamduleApplication.class, args);
}
}
@SpringBootApplication 어노테이션은 스프링 부트의 가장 기본적인 설정을 선언해 줍니다.
해당 어노테이션을 보면 아래와 같은 어노테이션이 다시 선언되어 있습니다.
2. @SpringBootApplication
@Target(value = {ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}),
@ComponentScan.Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class})})
public @interface SpringBootApplication {
@AliasFor(annotation = EnableAutoConfiguration.class)
public Class<?>[] exclude() default {};
@AliasFor(annotation = EnableAutoConfiguration.class)
public String[] excludeName() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
public String[] scanBasePackages() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
public Class<?>[] scanBasePackageClasses() default {};
@AliasFor(annotation = ComponentScan.class, attribute = "nameGenerator")
public Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
@AliasFor(annotation = Configuration.class)
public boolean proxyBeanMethods() default true;
}
여기서 눈여겨 볼 설정은 @ComponentScan과 @EnableAutoConfiguration 입니다.
3. @ComponentScan
@ComponentScan은 @component 어노테이션 및 @Service, @Repository, @Controller 등의 어노테이션을 스캔하여 Bean으로 등록해주는 어노테이션입니다.
4. @EnableAutoConfiguration
@EnableAutoConfiguration은 사전에 정의한 라이브러리들을 Bean으로 등록해 주는 어노테이션입니다.
사전에 정의한 라이브러리들 모두가 등록되는 것은 아니고 특정 Condition(조건)이 만족될 경우에 Bean으로 등록합니다.
사전 정의 파일 위치
Dependencies > spring-boot-autoconfigure > META-INF > spring.factories
# spring.factories 파일 내용
# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.SharedMetadataReaderFactoryContextInitializer,\
org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener
# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.autoconfigure.BackgroundPreinitializer
# Auto Configuration Import Listeners
org.springframework.boot.autoconfigure.AutoConfigurationImportListener=\
org.springframework.boot.autoconfigure.condition.ConditionEvaluationReportAutoConfigurationImportListener
# Auto Configuration Import Filters
org.springframework.boot.autoconfigure.AutoConfigurationImportFilter=\
org.springframework.boot.autoconfigure.condition.OnBeanCondition,\
org.springframework.boot.autoconfigure.condition.OnClassCondition,\
org.springframework.boot.autoconfigure.condition.OnWebApplicationCondition
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudServiceConnectorsAutoConfiguration,\
...
"org.springframework.boot.autoconfigure.EnableAutoConfiguration=" 에 등록된 클래스들이 자동으로 등록되는 Bean 입니다. 각 Bean은 OnBeanCondition, OnClassCondition, OnWebApplicationCondition 어노테이션의 조건에 의해 등록 여부가 결정됩니다.
@OnBeanCondition : 특정 Bean이 사전에 생성되어있지 않을 경우에 조건이 만족됩니다.
@ConditionalOnBean : 특정 Bean이 이미 생성되어있을 경우에 조건이 만족됩니다.
@ConditionalOnClass : Classpath에 특정 class가 존재할 경우에 조건이 만족됩니다.
'IT > Spring' 카테고리의 다른 글
[Spring Boot] thymeleaf template layout 사용하기 (5) | 2020.01.08 |
---|---|
[Spring Boot] SpringBootServletInitalizer를 상속하는 이유 (0) | 2020.01.07 |
[Spring Boot] Spring Boot 사용 및 Thymeleaf 연동 방법 (0) | 2020.01.06 |
[Spring Boot] Logback 설정 방법 (0) | 2020.01.03 |
[Spring Boot] MariaDB 연동 및 Mybatis 사용하기 (0) | 2020.01.02 |