Bird
Raised Fist0
Spring Bootframework~5 mins

Conditional bean creation in Spring Boot - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is @Conditional annotation used for in Spring Boot?
It is used to create beans only when certain conditions are met, like checking if a class exists or a property is set.
Click to reveal answer
beginner
Name two common built-in conditions for conditional bean creation in Spring Boot.
@ConditionalOnProperty and @ConditionalOnClass are commonly used to create beans based on property values or presence of classes.
Click to reveal answer
intermediate
How does @ConditionalOnProperty control bean creation?
It creates a bean only if a specific property is present and optionally matches a value in the application configuration.
Click to reveal answer
beginner
What happens if a condition in @Conditional is not met?
The bean is not created or registered in the Spring context, so it won't be available for injection.
Click to reveal answer
intermediate
Explain how @ConditionalOnMissingBean helps in bean creation.
It creates a bean only if no other bean of the same type or name is already defined, helping avoid duplicates.
Click to reveal answer
Which annotation creates a bean only if a certain property is set in Spring Boot?
A@Autowired
B@ConditionalOnClass
C@ConditionalOnMissingBean
D@ConditionalOnProperty
What does @ConditionalOnClass check before creating a bean?
AIf a property is set
BIf a class is present on the classpath
CIf a bean is missing
DIf a method is called
If a condition in @Conditional is false, what happens?
ABean is not created
BBean is created anyway
CApplication crashes
DBean is created with default values
Which annotation prevents bean creation if another bean of the same type exists?
A@ConditionalOnMissingBean
B@ConditionalOnProperty
C@ConditionalOnClass
D@Component
Why use conditional bean creation in Spring Boot?
ATo avoid using annotations
BTo always create all beans
CTo create beans only when needed
DTo slow down application startup
Describe how you can use conditional annotations to control bean creation in Spring Boot.
Think about checking properties or classes before creating beans.
You got /4 concepts.
    Explain the difference between @ConditionalOnProperty and @ConditionalOnMissingBean.
    One looks at config, the other at existing beans.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using @ConditionalOnProperty in Spring Boot?
      easy
      A. To disable all beans in the application
      B. To always create a bean regardless of configuration
      C. To create a bean only if a specific property is set in the configuration
      D. To create beans only during testing

      Solution

      1. Step 1: Understand the role of @ConditionalOnProperty

        This annotation checks if a property is set in the application configuration.
      2. Step 2: Effect on bean creation

        If the property matches the condition, Spring Boot creates the bean; otherwise, it skips it.
      3. Final Answer:

        To create a bean only if a specific property is set in the configuration -> Option C
      4. Quick Check:

        Conditional bean creation = property check [OK]
      Hint: Remember: @ConditionalOnProperty controls bean creation by config [OK]
      Common Mistakes:
      • Thinking it always creates beans
      • Confusing it with disabling all beans
      • Assuming it only works in tests
      2. Which of the following is the correct way to use @ConditionalOnProperty to create a bean only when feature.enabled is true?
      easy
      A. @ConditionalOnProperty(property = "feature.enabled", value = "true")
      B. @ConditionalOnProperty(name = "feature.enabled", havingValue = "true")
      C. @ConditionalOnProperty(key = "feature.enabled", equals = "true")
      D. @ConditionalOnProperty(enabled = "feature.enabled", isTrue = true)

      Solution

      1. Step 1: Recall correct annotation parameters

        The correct parameters are name for the property key and havingValue for the expected value.
      2. Step 2: Match with options

        @ConditionalOnProperty(name = "feature.enabled", havingValue = "true") uses name and havingValue correctly, others use invalid parameter names.
      3. Final Answer:

        @ConditionalOnProperty(name = "feature.enabled", havingValue = "true") -> Option B
      4. Quick Check:

        Correct params = name + havingValue [OK]
      Hint: Use 'name' and 'havingValue' parameters for @ConditionalOnProperty [OK]
      Common Mistakes:
      • Using wrong parameter names like 'property' or 'key'
      • Confusing 'havingValue' with 'value'
      • Using boolean true without quotes
      3. Given this Spring Boot bean definition:
      @Bean
      @ConditionalOnProperty(name = "app.feature", havingValue = "enabled")
      public Service myService() {
          return new Service();
      }

      What happens if the property app.feature=disabled is set in application.properties?
      medium
      A. The bean myService is created and available
      B. The bean is created but disabled
      C. Application fails to start with error
      D. The bean myService is NOT created

      Solution

      1. Step 1: Understand the condition

        The bean is created only if app.feature equals "enabled".
      2. Step 2: Check the property value

        The property is set to "disabled", which does not match "enabled".
      3. Final Answer:

        The bean myService is NOT created -> Option D
      4. Quick Check:

        Property mismatch = no bean creation [OK]
      Hint: Bean creates only if property matches havingValue exactly [OK]
      Common Mistakes:
      • Assuming bean creates regardless of property value
      • Thinking app fails to start on mismatch
      • Believing bean is created but inactive
      4. Consider this bean definition:
      @Bean
      @ConditionalOnProperty(name = "service.enabled", havingValue = "true")
      public Service service() {
          return new Service();
      }

      Why does the bean never get created even when service.enabled=true is set in application.properties?
      medium
      A. The property key name is incorrect or misspelled
      B. The property is a string but havingValue expects a boolean
      C. The bean method is missing @Component annotation
      D. The bean method must be static to work with @ConditionalOnProperty

      Solution

      1. Step 1: Verify property key spelling

        If the property key in application.properties is misspelled or different, condition fails.
      2. Step 2: Check other options

        HavingValue compares strings, so boolean type mismatch is not an issue; @Component is not needed on @Bean methods; static is not required.
      3. Final Answer:

        The property key name is incorrect or misspelled -> Option A
      4. Quick Check:

        Property key must match exactly [OK]
      Hint: Check property key spelling carefully for conditional beans [OK]
      Common Mistakes:
      • Assuming boolean type mismatch causes failure
      • Thinking @Component is needed on @Bean methods
      • Believing bean methods must be static
      5. You want to create two beans of the same type but only one should be active based on a property mode which can be "simple" or "advanced".
      Which is the best way to define these beans using @ConditionalOnProperty?
      hard
      A. Use @ConditionalOnProperty(name = "mode", havingValue = "simple") on the simple bean and @ConditionalOnProperty(name = "mode", havingValue = "advanced") on the advanced bean
      B. Use @ConditionalOnProperty(name = "mode") on both beans without havingValue
      C. Create both beans without conditions and select one at runtime
      D. Use @ConditionalOnProperty(name = "mode", matchIfMissing = true) on both beans

      Solution

      1. Step 1: Understand the requirement

        Only one bean should be active depending on the property value "simple" or "advanced".
      2. Step 2: Apply conditional annotations

        Using @ConditionalOnProperty with havingValue set to "simple" or "advanced" on each bean ensures only one bean loads.
      3. Step 3: Evaluate other options

        Use @ConditionalOnProperty(name = "mode") on both beans without havingValue lacks value check, so both beans may load; Create both beans without conditions and select one at runtime loads both always; Use @ConditionalOnProperty(name = "mode", matchIfMissing = true) on both beans activates both if property missing.
      4. Final Answer:

        Use @ConditionalOnProperty(name = "mode", havingValue = "simple") on the simple bean and @ConditionalOnProperty(name = "mode", havingValue = "advanced") on the advanced bean -> Option A
      5. Quick Check:

        Use havingValue to select one bean by property [OK]
      Hint: Use havingValue to pick one bean per property value [OK]
      Common Mistakes:
      • Not specifying havingValue causing both beans to load
      • Trying to select bean at runtime instead of conditionally
      • Using matchIfMissing on both beans causing conflicts
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard