μ€νλ§ λΆνΈλ λ€μν 쑰건μ λ°λΌ λΉμ μμ±νκ±°λ μ€μ μ μ μ©ν μ μλ κ°λ ₯ν μ‘°κ±΄λΆ μ€μ κΈ°λ₯μ μ 곡ν©λλ€. μ΄ κΈ°λ₯μ νμ©νλ©΄, νκ²½μ λ°λΌ μ ν리μΌμ΄μ μ λμμ μ μ°νκ² μ μ΄ν μ μμ΅λλ€. μ΄λ² κΈμμλ @Conditional μ΄λ Έν μ΄μ κ³Ό μ€νλ§ λΆνΈμμ μ 곡νλ μ¬λ¬ @ConditionalOnXxx μ΄λ Έν μ΄μ λ€μ μμΈν μ΄ν΄λ³΄κ² μ΅λλ€.
@Conditional μ΄λ Έν μ΄μ
@Conditional μ΄λ Έν μ΄μ μ νΉμ μ‘°κ±΄μ΄ λ§μ‘±λ λλ§ λΉμ λ±λ‘νκ±°λ μ€μ μ μ μ©νλλ‘ λμμ€λλ€. μ΄ μ΄λ Έν μ΄μ μ μ¬μ©νκΈ° μν΄μλ 쑰건μ μ μνλ Condition μΈν°νμ΄μ€λ₯Ό μ§μ ꡬνν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ νΉμ νλ‘νμΌμ λ°λΌ λΉμ λ±λ‘νλ μ½λλ₯Ό μμ±ν μ μμ΅λλ€:
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
@Configuration
@Conditional(MyProfileCondition.class)
public class ProfileConfig {
@Bean
public MyService myService() {
return new MyService();
}
}
- μμ μ½λλ MyProfileCondition ν΄λμ€μ 쑰건μ λ§μ‘±ν λλ§ ProfileConfig μ€μ μ΄ μ μ©λ©λλ€.
@ConditionalOnProperty
μ€νλ§ λΆνΈλ κ°λ°μκ° μμ£Ό μ¬μ©νλ 쑰건μ λ μ½κ² μ μ©ν μ μλλ‘ λ€μν @ConditionalOnXxx μ΄λ Έν μ΄μ μ μ 곡ν©λλ€. κ·Έ μ€ νλκ° @ConditionalOnPropertyμ λλ€. μ΄ μ΄λ Έν μ΄μ μ νΉμ νλ‘νΌν°κ° μ€μ λμ΄ μλμ§, κ·Έλ¦¬κ³ ν΄λΉ νλ‘νΌν°μ κ°μ΄ μ§μ λ κ°κ³Ό μΌμΉνλμ§λ₯Ό κ²μ¬ν©λλ€.
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
@Configuration
@ConditionalOnProperty(name = "featureX.enabled", havingValue = "true")
public class FeatureXConfig {
@Bean
public FeatureXService featureXService() {
return new FeatureXService();
}
}
- μμ μ½λλ featureX.enabled νλ‘νΌν°μ κ°μ΄ trueμΌ λλ§ FeatureXConfig μ€μ μ΄ μ μ©λ©λλ€. λ΄λΆμ μΌλ‘ @Conditionalκ³Ό Condition μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬ κ΅¬νλ©λλ€.
package org.springframework.boot.autoconfigure.condition;
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
// μ΄λ
Έν
μ΄μ
μ μ
}
λ€μν ConditionalOnXxx μ΄λ Έν μ΄μ
μ€νλ§ λΆνΈλ λ€μν μν©μμ μ‘°κ±΄λΆ μ€μ μ μ μ©ν μ μλλ‘ μ¬λ¬ @ConditionalOnXxx μ΄λ Έν μ΄μ μ μ 곡ν©λλ€. μ¬κΈ°μλ λνμ μΈ λͺ κ°μ§λ₯Ό μκ°ν©λλ€.
@ConditionalOnClass, @ConditionalOnMissingClass
- @ConditionalOnClass: νΉμ ν΄λμ€κ° ν΄λμ€ν¨μ€μ μ‘΄μ¬ν λ μ€μ μ μ μ©ν©λλ€.
- @ConditionalOnMissingClass: νΉμ ν΄λμ€κ° ν΄λμ€ν¨μ€μ μ‘΄μ¬νμ§ μμ λ μ€μ μ μ μ©ν©λλ€.
@ConditionalOnBean, @ConditionalOnMissingBean
- @ConditionalOnBean: νΉμ λΉμ΄ μ€νλ§ μ»¨ν μ€νΈμ μ‘΄μ¬ν λ μ€μ μ μ μ©ν©λλ€.
- @ConditionalOnMissingBean: νΉμ λΉμ΄ μ€νλ§ μ»¨ν μ€νΈμ μ‘΄μ¬νμ§ μμ λ μ€μ μ μ μ©ν©λλ€.
@ConditionalOnResource
- @ConditionalOnResource: νΉμ 리μμ€κ° ν΄λμ€ν¨μ€μ μ‘΄μ¬ν λ μ€μ μ μ μ©ν©λλ€.
@ConditionalOnWebApplication, @ConditionalOnNotWebApplication
- @ConditionalOnWebApplication: μ ν리μΌμ΄μ μ΄ μΉ μ ν리μΌμ΄μ μΌ λ μ€μ μ μ μ©ν©λλ€.
- @ConditionalOnNotWebApplication: μ ν리μΌμ΄μ μ΄ μΉ μ ν리μΌμ΄μ μ΄ μλ λ μ€μ μ μ μ©ν©λλ€.
@ConditionalOnExpression
- @ConditionalOnExpression: SpEL ννμμ λ§μ‘±ν λ μ€μ μ μ μ©ν©λλ€.
κ²°λ‘
μ€νλ§ λΆνΈμ @Conditional λ° λ€μν @ConditionalOnXxx μ΄λ Έν μ΄μ μ νμ©νλ©΄, μ ν리μΌμ΄μ μ μ€μ μ νκ²½μ λ°λΌ μ μ°νκ² μ μ΄ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λ ν¨μ¨μ μ΄κ³ μ μ§λ³΄μνκΈ° μ¬μ΄ μ ν리μΌμ΄μ μ κ°λ°ν μ μμ΅λλ€.
λ μμΈν μ 보λ Spring Boot 곡μ λ¬Έμ(https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration.condition-annotations)
μμ νμΈν μ μμ΅λλ€. λ€μν μ‘°κ±΄λΆ μ€μ μ μ νμ©νμ¬ λ λμ μ€νλ§ λΆνΈ μ ν리μΌμ΄μ
μ κ°λ°νμκΈΈ λ°λλλ€.
[μ°Έμ‘°]
μ€νλ§ λΆνΈ - ν΅μ¬ μ리μ νμ©
'π» FrameWork(νλ μμν¬) > SpringBoot(μ€νλ§λΆνΈ)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μ€νλ§ λΆνΈ μλ κ΅¬μ± (Auto Configuration) (0) | 2024.08.07 |
---|---|
μ€νλ§ λΆνΈ μ€νν° (0) | 2024.07.28 |