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 a 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;