SpringBoot๋ main ๋ฉ์๋๊ฐ ์ ์ธ๋ ํด๋์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์คํํฉ๋๋ค.
SpringBoot ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑ์ ํ๋ก์ ํธ ๋ช
์ผ๋ก @SpringBootApplication
์ด ๋ถ์ ํด๋์ค๊ฐ ์กด์ฌํ๊ณ ๊ทธ ์์๋ main ๋ฉ์๋๊ฐ ์กด์ฌํฉ๋๋ค.
@SpringBootApplication
public class SpringTestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringTestApplication.class, args);
}
}
@SpringBootApplication
์ด๋
ธํ
์ด์
์ ์คํ๋ง ๋ถํธ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ ์ ์ธํด์ค๋๋ค.
๊ทธ๋ ๋ค๋ฉด @SpringBootApplication
์ด ์ด๋ป๊ฒ ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ ํ๋์ง, ์ด๋ป๊ฒ Spring ๋ด๋ถ์์ ์๋์ ํ๋์ง์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ค์์ @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 {
// ...
}
์ด๋ ธํ ์ด์ ์ ๋ง๋ค๊ธฐ ์ํด์ Target๊ณผ Retention์ ์ค์ ํด์ฃผ๋ ๊ฒ์ ๊ธฐ๋ณธ์ ๋๋ค. ๊ทธ ์ธ์ ๊ฒ์ ์ดํด๋ณผ๊น์?
Spring Boot ์์ฉ ํ๋ก๊ทธ๋จ @Configuration
์ ์ ๊ณตํจ์ ๋ํ๋
๋๋ค. ๊ตฌ์ฑ์ ์๋์ผ๋ก ์ฐพ์ ์ ์๋๋ก Spring์ ํ์ค @Configuration
์ฃผ์ ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ์ด๋
ธํ
์ด์
์ @component
์ด๋
ธํ
์ด์
๋ฐ @Service
, @Repository
, @Controller
๋ฑ์ ์ด๋
ธํ
์ด์
์ ์ค์บํ์ฌ Spring Bean์ผ๋ก ๋ฑ๋กํด์ฃผ๋ ์ด๋
ธํ
์ด์
์
๋๋ค.
ํด๋น ์ด๋ ธํ ์ด์ ์ ์ฌ์ ์ ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ Bean์ผ๋ก ๋ฑ๋กํ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค. ๋ด๋ถ์์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
@ComponentScan
์ ํตํด ๋์์ด ๋๋ ๊ฐ์ฒด๋ฅผ Bean์ ๋ฑ๋กํ๊ณ , tomcat ๋ฑ ์คํ๋ง์ ์ ์ํ ์ธ๋ถ ์์กด์ฑ์ ๊ฐ๋ class๋ค์ ์ค์บํ์ฌ bean ์ผ๋ก ๋ฑ๋กํฉ๋๋ค.- ์ด ๋ ์ ์๋ class๋ค์ spring-boot-autoconfigure ์์ ๋ค์ด์๋ META-INF ํด๋์
spring.factories
๋ผ๋ ํ์ผ์ ์ ์๋์ด ์์ต๋๋ค. - ์ด ์ค์์
org.springframework.boot.autoconfigure.EnableAutoConfiguration
์ key๋กํ๋ ์ธ๋ถ ์์กด์ฑ class๋ค์ด ์กด์ฌํ๋ฉฐ, ์ฌ๊ธฐ์ ์ ์๋ ๋ชจ๋ class๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ ์๋๋ผ class์ ๋ด๋ถ์ ์ ์๋ ์ด๋ ธํ ์ด์ ์ ๋ฐ๋ผ ๊ทธ ์กฐ๊ฑด์ ๋ถํฉํ๋ class๋ค๋ง ์์ฑ๋ฉ๋๋ค.@ConditionalOnProperty
,@ConditionalOnClass
,@ConditionalOnBean
๋ฑ
# 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.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
...
๋ฐ๋ผ์ @SpringBootApplication
์ด ๋ถ์ ํด๋์ค๊ฐ ์คํ๋ ๋ @ComponentScan
์ด ํด๋น๋๋ ์ด๋
ธํ
์ด์
์ด ๋ถ์ ํด๋์ค๋ฅผ ์ฝ์ด๋ค์ฌ bean์ผ๋ก ๋ฑ๋กํ๊ณ , @EnableAutoConfiguration
์ ์ํด์ ํ๊ฒฝ์ ํ์ํ ์๋ ์ค์ ์ bean์ผ๋ก ๋ฑ๋กํด์ค๋๋ค.