[Spring] @SpringBootApplication μ λνμ¬.
0.πΆλ€μ΄κ°λ©°
Spring bootλ‘ νλ‘μ νΈλ₯Ό μ€ννλ©΄ μμμ λ§λ€μ΄μ§λ μ μΌν μλ° μ½λλ‘ μλμ κ°μ μ½λλ₯Ό μ°Ύμλ³Ό μ μμ΅λλ€.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
μ¬κΈ°μ λΆμ΄μλ μ΄λ Έν μ΄μ μΈ @SpringBootApplicationμ΄ μ΄λ€ μν μ νκ³ μλμ§ κΆκΈνμ¬ μ΄μ λν΄ μ°Ύμ보μκ³ , μ΄λ₯Ό ν΅ν΄ Springμ μ¬λ¬ μ΄λ Έν μ΄μ μ λν΄ μμλ³Ό μ μκ² λμμ΅λλ€. μ΄λ² κΈμμλ κ·Έ λ΄μ©μ μκ°νκ³ μ ν©λλ€.
@SpringBootApplicationμ΄ μ΄λ€ μ΄λ Έν μ΄μ μΈμ§ μκΈ° μν΄ μ μλ κ³³μ μ°Ύμκ° λ³΄μμ΅λλ€. μλ ν¨ν€μ§μ μ‘΄μ¬νλκ΅°μ!
package org.springframework.boot.autoconfigure;
@SpringBootApplication μ΄λ Έν μ΄μ μ μ μΈλΆλ§ μ΄ν΄λ³΄λ©΄ μλ μ¬μ§κ³Ό κ°μ΄ λμ΄μμ΅λλ€.
μ£Όμ κΉκ² λ΄μΌν κ³³μ μ€νλ§ κ³ μ μ΄λ Έν μ΄μ μ΄κ³ μ¬κΈ°μλ μΈ κ°μ§κ° μμ΅λλ€.
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
μ μΈ κ°μ§ μ΄λ Έν μ΄μ κΈ°λ₯μ @SpringBootApplication νλλ‘ νμ±ν μν¬ μ μλ κ²μ΄μ£ !
κ·Έλ¬λ©΄ νλνλ μ’ λ μ΄ν΄λ³΄λλ‘ νκ² μ΅λλ€.
1. @SpringBootConfiguration
@SpringBootConfiguration
enable registration of extra beans in the context or the import of additional configuration classes. An alternative to Spring’s standard @Configuration that aids configuration detection in your integration tests.
μ€νλ§μ @Configuration μ΄λ Έν μ΄μ λ₯Ό λ체νλ μ΄λ Έν μ΄μ μ λλ€. κ±°μ λΉμ·ν κΈ°λ₯μ μ 곡νμ£ !
λ μ΄λ Έν μ΄μ μ μ°¨μ΄μ μΌλ‘λ @SpringBootConfigurationμ ꡬμ±μ μλμΌλ‘ μ°Ύμ μ μλ€λΌκ³ ν©λλ€.
μ°¨μ΄μ μ λν΄μλ μμ§ μ λλ‘ μ΄ν΄νμ§ λͺ»ν κ² κ°μ μΆν λ 곡λΆν΄λ³΄κ³ λ΄μ©μ μ‘°κΈ λ 보μν΄λ³΄κ² μ΅λλ€.
@Configuration μ΄λ Έν μ΄μ ?
μ€μ ν΄λμ€μμ μ΄λ Έν μ΄μ μ μ΄μ©ν΄ λΉμ λ±λ‘νλ €λ©΄ μλμ κ°μ΄ μ½λλ₯Ό μμ±ν΄μ£Όμ΄μΌ ν©λλ€.
@Cofiguration μ΄λ Έν μ΄μ μ ν΄λμ€μ λΆμ΄λ κ²μ΄κ³ @Bean μ΄λ Έν μ΄μ κ³Ό ν¨κ» λ©μλλ₯Ό μμ±ν΄μ£Όλ κ²μ΄μ£ .
@Configuration
public class MyConfig {
@Bean
public MyBean mybean() {
return new MyBean();
}
}
μμ κ°μ΄ μ½λλ₯Ό μμ±νκ²λλ©΄ μ€νλ§ μ»¨ν μ΄λκ° @Configurationμ΄ λΆμ΄μλ MyConfigλ₯Ό μλμΌλ‘ λΉμΌλ‘ λ±λ‘νκ³ , ν΄λΉ ν΄λμ€λ₯Ό νμ±ν΄μ @Beanμ΄ λΆμ΄μλ λ©μλλ₯Ό μ°Ύμ λΉμ μμ±ν΄μ€λλ€. μ΄ λ Beanμ μ΄λ¦μ λ©μλλͺ μ΄ λ©λλ€.
@Configurationμ μ¨μ£Όμ΄μΌ @BeanμΌλ‘ λ±λ‘νλ λΉμ΄ μ±κΈν€μ 보μ₯ λ°μ μ μλλ° μ΄μ λν μμΈν λ΄μ©μ μλλ₯Ό μ°Έκ³ ν΄μ£ΌμΈμ!
2. @EnableAutoConfiguration
@EnableAutoConfiguration
enable Spring Boot’s auto-configuration mechanism
ν΄λΉ μ΄λ Έν μ΄μ μ μ€νλ§ λΆνΈμ μλ μ€μ λ©μ»€λμ¦μ νμ±νμμΌμ€λλ€.
μ΄κ² λ¬΄μ¨ λ§μ΄μ§..?
Spring Bootμ λΉ λ±λ‘ λ°©μμ λ λ¨κ³μ κ±Έμ³μ μ§νλλ€κ³ ν©λλ€.
- ComponentScanμΌλ‘ beanμ λ±λ‘
- EnableAutoConfigurationμΌλ‘ beanμ λ±λ‘
μ΄ λ 2λ² κ³Όμ μ λν΄ μμ보면, @EnableAutoConfiguration μ΄λ Έν μ΄μ μ μ€νλ§ λΆνΈκ° 미리 μ μν΄λμ λΉ μ€μ λ€(meta νμΌμ μ‘΄μ¬)μ λΉμΌλ‘ λ±λ‘νλ μν μ μνν©λλ€.
# Spring Bootμ meta νμΌ? -> spring-boot-autoconfigure νλ‘μ νΈμ META-INF ν¨ν€μ§ μ spring.factoriesμ λ€μ΄μμ!
3. @ComponentScan
@ComponentScan
enable @Component scan on the package where the application is located
μμ£Ό 보μ΄λ μ΄λ Έν μ΄μ μ΄ λμλ€μ,, μμ ν΄λΉ μ΄λ Έν μ΄μ μ μ¬μ©ν΄ λΉ λ±λ‘μ νλ€κ³ νμλλ° μ’ λ μμλ΄ μλ€.
μ€νλ§μ μ¬μ©νλ©΄μ νμμ λ°λΌ @Component, @Service, @Repository, @Controller, @Configuration λ±κ³Ό κ°μ μ΄λ Έν μ΄μ μ μ¬μ©ν΄ λΉμΌλ‘ λ±λ‘νκ³ μ ν©λλ€.
κ·Όλ° κ·Έλ₯ λ΄κ° λ§λ ν΄λμ€μ μμ κ°μ μ΄λ Έν μ΄μ μ μ°λ©΄ μ€μ νμΌμ λ±λ‘ν κ²λ μλλ° μ΄λ»κ² λΉμΌλ‘ λ±λ‘ν΄μ€κΉ?λΌλ μλ¬Έμ΄ μκΉλλ€. λ°λ‘ @ComponentScanμ΄ μ€μ λ μμ μ§μ λΆν° λΉμΌλ‘ λ±λ‘νκ³ μνλ λλ€(μ»΄ν¬λνΈ ν΄λμ€λ€)μ λ€ μ°Ύμμ λ±λ‘ν΄μ€λλ€.
μμμ μ΄ν΄λ³Έ κ²κ³Ό κ°μ΄ @Configurationμμ μλμΌλ‘ λΉμ λ±λ‘ν μλ μμ§λ§(@Bean μ¬μ©ν΄μ) μλμ κ°μ΄ μ½λλ₯Ό μμ±νλ€λ©΄ μλμΌλ‘ Componentλ€μ Scan νμ¬ λΉμΌλ‘ λ±λ‘ν΄μ€λλ€.
@Configuration
@ComponentScan
public class MyConfig {
// Beanλ€μ΄ μλμΌλ‘ λ±λ‘
}
4.πμ 리
μ 리νμλ©΄ @SpringBootApplicationμ ν΅ν΄
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
μ μΈ κ°μ§ κΈ°λ₯μ νκΊΌλ²μ μ 곡ν΄μ€λ€κ³ λ³Ό μ μλλ° νμν λΉλ€μ λ±λ‘νλ κ²μ΄ μ£Όλ κΈ°λ₯μΈ κ² κ°μ΅λλ€.
κ΄λ ¨ λ΄μ©μ μ°Ύλ€λ³΄λ μ€νλ§ κΈ°λ³Έ κ°λ μ λν΄ μ μμ§ λͺ»νλ ꡬλλΌκ³ λλΌκ² λλ κ² κ°μ΅λλ€. μΆν μ€νλ§ κ³΅λΆλ₯Ό λ μ§νν΄λ³΄λ©΄μ κΈ°νκ° λλ©΄ κ΄λ ¨ λ΄μ©μ μ‘°κΈ λ μμΈνκ² λ€λ€λ³΄λλ‘ νκ² μ΅λλ€.