Bird
Raised Fist0
Spring Bootframework~20 mins

@Value for property injection in Spring Boot - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Property Injection Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output of this Spring Boot component using @Value?
Consider this Spring Boot component:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class Greeting {
    @Value("${app.greeting}")
    private String message;

    public String getMessage() {
        return message;
    }
}

If the application.properties contains app.greeting=Hello, Spring!, what will getMessage() return?
Anull
B${app.greeting}
CCompilation error due to missing setter
DHello, Spring!
Attempts:
2 left
💡 Hint
Think about how @Value injects property values into fields.
📝 Syntax
intermediate
2:00remaining
Which option correctly injects a default value with @Value?
You want to inject a property app.name but provide a default value "MyApp" if the property is missing. Which @Value syntax is correct?
A@Value("${app.name:MyApp}")
B@Value("${app.name|MyApp}")
C@Value("${app.name?MyApp}")
D@Value("${app.name?default=MyApp}")
Attempts:
2 left
💡 Hint
Spring uses colon ':' to specify default values in @Value expressions.
🔧 Debug
advanced
2:00remaining
Why does this @Value injection fail with a NullPointerException?
Given this code:
@Component
public class Config {
    @Value("${app.timeout}")
    private Integer timeout;

    public int getTimeout() {
        return timeout;
    }
}

and app.timeout is not set in properties, what causes a NullPointerException when calling getTimeout()?
AMissing @Autowired causes field not to be injected
BSpring cannot inject Integer fields, must use int primitive
Ctimeout is null because property is missing, unboxing to int causes NullPointerException
DThe @Value annotation syntax is invalid for Integer fields
Attempts:
2 left
💡 Hint
Consider what happens when a null Integer is converted to int.
🧠 Conceptual
advanced
2:00remaining
What happens if you use @Value on a static field?
Consider this code snippet:
@Component
public class StaticConfig {
    @Value("${app.version}")
    private static String version;

    public static String getVersion() {
        return version;
    }
}

What will be the behavior of the version field?
Aversion is injected but only after calling getVersion() once
Bversion remains null because Spring does not inject @Value into static fields
CCompilation error because @Value cannot be used on static fields
Dversion is injected correctly with the property value
Attempts:
2 left
💡 Hint
Think about how Spring manages instance fields versus static fields.
❓ state_output
expert
2:00remaining
What is the output of this Spring Boot component with SpEL in @Value?
Given this component:
@Component
public class Calculator {
    @Value("#{2 * 3 + 4}")
    private int result;

    public int getResult() {
        return result;
    }
}

What will getResult() return?
A10
B14
C6
DRuntime error due to invalid expression
Attempts:
2 left
💡 Hint
Evaluate the expression 2 * 3 + 4 using normal math rules.

Practice

(1/5)
1. What is the main purpose of the @Value annotation in Spring Boot?
easy
A. To create database connections
B. To define a new Spring bean
C. To handle HTTP requests
D. To inject values from configuration files into Spring beans

Solution

  1. Step 1: Understand the role of @Value

    @Value is used to inject configuration values like those from application.properties into Spring beans.
  2. Step 2: Compare with other options

    Defining beans, handling HTTP requests, and database connections are done by other annotations or classes, not @Value.
  3. Final Answer:

    To inject values from configuration files into Spring beans -> Option D
  4. Quick Check:

    @Value injects config values = A [OK]
Hint: Remember: @Value pulls config values into your code [OK]
Common Mistakes:
  • Confusing @Value with @Bean or @Autowired
  • Thinking @Value handles HTTP or DB tasks
  • Ignoring that @Value reads from properties
2. Which of the following is the correct syntax to inject a property named app.name using @Value?
easy
A. @Value(${app.name}) private String appName;
B. @Value("${app.name}") private String appName;
C. @Value("app.name") private String appName;
D. @Value(app.name) private String appName;

Solution

  1. Step 1: Recall correct syntax for property injection

    The property key must be inside ${} and the whole expression inside quotes: @Value("${property.key}").
  2. Step 2: Check each option

    @Value("${app.name}") private String appName; matches the correct syntax. The other options miss either the quotes around the expression, the ${} delimiters, or use quotes around just the property name.
  3. Final Answer:

    @Value("${app.name}") private String appName; -> Option B
  4. Quick Check:

    Correct syntax uses ${} inside quotes = D [OK]
Hint: Use @Value("${property.key}") with quotes and ${} [OK]
Common Mistakes:
  • Omitting quotes around the expression
  • Forgetting the ${} around the property key
  • Using plain property name without ${}
3. Given the property server.port=8080 in application.properties, what will be the output of this Spring component?
public class ServerConfig {
  @Value("${server.port}")
  private int port;

  public int getPort() {
    return port;
  }
}

// In main method:
ServerConfig config = new ServerConfig();
System.out.println(config.getPort());
medium
A. 0
B. 8080
C. null
D. Compilation error

Solution

  1. Step 1: Understand Spring bean lifecycle and injection

    Property injection with @Value happens only when Spring creates and manages the bean. Here, ServerConfig is created manually with new, so injection does not happen.
  2. Step 2: Check default value of int field

    Since port is a primitive int and not injected, it defaults to 0.
  3. Final Answer:

    0 -> Option A
  4. Quick Check:

    Manual new means no injection, int defaults to 0 [OK]
Hint: Only Spring-managed beans get @Value injection [OK]
Common Mistakes:
  • Assuming @Value works on manually created objects
  • Expecting null for primitive int fields
  • Ignoring Spring bean lifecycle
4. What is wrong with this code snippet?
@Value("${missing.property}:defaultValue")
private String value;

When missing.property is not defined in properties, the application fails to start with an error.
medium
A. The field must be public for @Value to work
B. The property key must be defined; default values are not supported
C. The default value syntax is incorrect; colon should be inside quotes
D. The @Value annotation cannot be used on String fields

Solution

  1. Step 1: Check default value syntax in @Value

    The default value must be inside the quotes as part of the expression: @Value("${property:default}") is correct.
  2. Step 2: Identify the error cause

    If the colon is outside quotes or expression is malformed, Spring cannot parse it and throws an error.
  3. Final Answer:

    The default value syntax is incorrect; colon should be inside quotes -> Option C
  4. Quick Check:

    Default values must be inside ${} quotes [OK]
Hint: Put default after colon inside quotes in @Value [OK]
Common Mistakes:
  • Placing colon outside the quotes
  • Assuming default values are not supported
  • Making fields public unnecessarily
5. You want to inject a list of strings from a property app.modes=dev,prod,test into a Spring bean using @Value. Which approach correctly converts the property into a List<String>?
hard
A. @Value("#{T(java.util.Arrays).asList('${app.modes}'.split(','))}") private List<String> modes;
B. @Value("${app.modes}") private List<String> modes; // Spring auto-converts comma-separated string
C. @Value("${app.modes}") private String[] modes; // Use array instead of List
D. @Value("${app.modes}") private String modes; // Parse manually later

Solution

  1. Step 1: Understand property injection for collections

    Spring does not automatically convert comma-separated strings to List<String> with plain @Value.
  2. Step 2: Use SpEL expression for conversion

    @Value("#{T(java.util.Arrays).asList('${app.modes}'.split(','))}") private List<String> modes; uses Spring Expression Language (SpEL) to split the string and convert it to a List<String>, which is the correct approach.
  3. Final Answer:

    @Value("#{T(java.util.Arrays).asList('${app.modes}'.split(','))}") private List<String> modes; -> Option A
  4. Quick Check:

    Use SpEL split and asList for List injection [OK]
Hint: Use SpEL with split and asList to inject List<String> [OK]
Common Mistakes:
  • Expecting automatic conversion from String to List
  • Using array when List is required without conversion
  • Injecting as String and forgetting to parse
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