This rule reports when the Spring `@Value` annotation injects a simple value that does not contain an expression.

## Why is this an issue?

The purpose of the `@Value` annotation in `org.springframework.beans.factory.annotation` is to inject a value into a field or method based on the Spring context after it has been established.

If the annotation does not include an expression (either Spring Expression Language or a property injection), the injected value is a simple constant that does not depend on the Spring context, making the annotation replaceable with a standard field initialization statement.

This not only implies the redundant use of `@Value`, but could also indicate an error where the expression indicators (`#`, `$`) were omitted by mistake.

### Exceptions

This rule does not raise an issue if `@Value` is applied to a method or method argument, because the annotation has the side effect that the method is called.

## How to fix it

- If a property is to be injected, use `${propertyName}` instead of `propertyName`.
- If a SpEL expression is to be evaluated, use `#{expression}` instead of `expression`.
- If you intend to initialize a field with a simple value or with an expression that does not depend on the Spring context, use a standard field initialization statement.

### Code examples

#### Noncompliant code example

    @Value("catalog.name") // Noncompliant, this will not inject the property
    String catalog;

#### Compliant solution

    @Value("${catalog.name}") // Compliant
    String catalog;

#### Noncompliant code example

    @Value("book.topics[0]") // Noncompliant, this will not evaluate the expression
    Topic topic;

#### Compliant solution

    @Value("#{book.topics[0]}") // Compliant
    Topic topic;

#### Noncompliant code example

    @Value("Hello, world!") // Noncompliant, this use of @Value is redundant
    String greeting;

#### Compliant solution

    String greeting = "Hello, world!"; // Compliant

## Resources

### Documentation

- Spring Framework API - Annotation Interface Value

### Articles & blog posts

- Baeldung - A Quick Guide to Spring @Value
- DigitalOcean - Spring @Value Annotation