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.

Why is this an issue?

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.

How to fix it

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}.

Code examples

Noncompliant code example

@Nullable
@Value("${my.property}") // Noncompliant, no default value is provided, even though the field is nullable
private String myProperty;

Compliant solution

@Nullable
@Value("${my.property:#{null}}") // Compliant, a default value is provided
private String myProperty;

Resources

Articles & blog posts