SpEL, the Spring Expression Languages allows developers fine-grained control over the values injected into fields and parameters. Using the
@Value annotation, it is possible to inject values from sources such as system properties.
The @Value annotation does not guarantee that the property is defined. Particularly if a field or parameter is annotated as nullable,
it indicates that the developer assumes that the property may be undefined.
An undefined property may lead to runtime exceptions when the Spring framework tries to inject the autowired dependency during bean creation.
This rule raises an issue when a nullable field or parameter is annotated with @Value and no default value is provided.
Add a default value to the @Value annotation. A default value can be supplied by using the colon (:) operator. As the
field is nullable, the default value should most likely be #{null}.
@Nullable
@Value("${my.property}") // Noncompliant, no default value is provided, even though the field is nullable
private String myProperty;
@Nullable
@Value("${my.property:#{null}}") // Compliant, a default value is provided
private String myProperty;