2014-04-25 5 views
5

वसंत 4 में दो नए एनोटेशन @Condition और @ConfigurationConditon को नियंत्रित करने के लिए वसंत अनुप्रयोग संदर्भ में एक बीन जोड़ा गया है या नहीं। JavaDoc @ConfigurationCondition के उपयोग के मामलों को समझने के लिए पर्याप्त संदर्भ/बड़ी तस्वीर प्रदान नहीं करता है।वसंत @ कॉन्फ़िगरेशन कंडीशन बनाम @ कंडिशन का उपयोग कब करें?

@ConfigurationCondition का उपयोग @Condition बनाम किया जाना चाहिए?

public interface ConfigurationCondition extends Condition { 

    /** 
    * Returns the {@link ConfigurationPhase} in which the condition should be evaluated. 
    */ 
    ConfigurationPhase getConfigurationPhase(); 

    /** 
    * The various configuration phases where the condition could be evaluated. 
    */ 
    public static enum ConfigurationPhase { 

     /** 
     * The {@link Condition} should be evaluated as a {@code @Configuration} class is 
     * being parsed. 
     * 
     * <p>If the condition does not match at this point the {@code @Configuration} 
     * class will not be added. 
     */ 
     PARSE_CONFIGURATION, 

     /** 
     * The {@link Condition} should be evaluated when adding a regular (non 
     * {@code @Configuration}) bean. The condition will not prevent 
     * {@code @Configuration} classes from being added. 
     * 
     * <p>At the time that the condition is evaluated all {@code @Configuration}s 
     * will have been parsed. 
     */ 
     REGISTER_BEAN 
    } 

} 

उत्तर

5

ConfigurationCondition@Configuration कक्षाओं के लिए Condition की विशेषज्ञता है।

सादा Condition आपके 99% उपयोग मामलों के लिए ठीक है, तो आपको पहले उस पर विचार करना चाहिए। विशेषज्ञता वास्तव में यह निर्धारित करने के बारे में है कि चरण@Configuration कक्षाओं की प्रसंस्करण की स्थिति का मूल्यांकन किया जाना चाहिए।

  • PARSE_CONFIGURATION हालत जब @Configuration -annotated वर्ग पार्स किया गया है का मूल्यांकन करता है:

    दो चरणों रहे हैं। यह कॉन्फ़िगरेशन क्लास

  • REGISTER_BEAN पूरी तरह से कॉन्फ़िगर करने के लिए कॉन्फ़िगरेशन क्लास से एक बीन पंजीकृत होने का मौका देता है। इस पर रोक नहीं लगाता विन्यास वर्ग जोड़े जाने के लिए, लेकिन यह एक सेम परिभाषा छोड़ने की सुविधा हालत (के रूप में Condition इंटरफ़ेस का matches विधि द्वारा परिभाषित) से मेल नहीं खाता

स्प्रिंग बूट एक OnBeanCondition कि मूल रूप से जाँच करता है की अनुमति देता है पंजीकरण चरण के दौरान यदि एक और बीन मौजूद है। यह ConditionalOnBean के मुख्य जब एक सेम मौजूद है

+0

क्या आप दो अलग-अलग चरणों के अर्थ के बारे में अधिक जानकारी दे सकते हैं। क्या ये चरण बीन प्रारंभिक जीवन चक्र में चरणों से अलग हैं जहां विभिन्न पोस्ट प्रोसेसर निष्पादित होते हैं? – ams

+0

मेरा जवाब अपडेट किया गया। –

2

कोई @ConfigurationCondition या @Condition एनोटेशन रहे हैं कि मूल रूप से कुछ करता है, लेकिन केवल @Conditional@Conditional के लिए कोई Condition या ConfigurationCondition निर्दिष्ट कर सकता है।

@Conditional निर्धारित करता है कि @Configuration कक्षा को किसी शर्त के आधार पर सक्षम या अक्षम किया जाना है या नहीं। documentation says के रूप में सबसे अच्छा उदाहरण @Profile एनोटेशन स्वयं है, जो निर्धारित करता है कि कौन से सेम लोड किए गए प्रोफाइल पर आधारित हैं या नहीं।

ConfigurationCondition द्वारा विचार किए जाने वाले दो चरण वे हैं जो @Configuration वर्ग के माध्यम से जाते हैं: पहले कक्षा को पार्स किया जाता है और फिर सेम पंजीकृत और बनाए जाते हैं।

+0

"हालत या कॉन्फ़िगरेशन कंडीशन" पर जोर – Selwyn

संबंधित मुद्दे