47 lines
1.5 KiB
Plaintext
47 lines
1.5 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Spring dependency injection framework does not support injecting data into static fields. When @Value, @Inject, or @Autowired are applied to static fields, they are ignored.
|
|
|
|
=== What is the potential impact?
|
|
|
|
* *Null Values*: Uninitialized static fields annotated with @Value, @Inject, or @Autowired will not be initialized by Spring, potentially causing NullPointerException at runtime.
|
|
* *Confusing Code*: The presence of injection annotations on static fields can mislead developers into believing that the fields will be populated by Spring.
|
|
|
|
This rule raises an issue when a static field is annotated with @Value, @Inject, or @Autowired.
|
|
|
|
== How to fix it
|
|
|
|
Either use an instance field instead of a static field or remove the @Value, @Inject, or @Autowired annotation and initialize the field.
|
|
|
|
=== Code examples
|
|
|
|
==== Noncompliant code example
|
|
|
|
[source,java,diff-id=1,diff-type=noncompliant]
|
|
----
|
|
@Component
|
|
public class MyComponent {
|
|
|
|
@Value("${my.app.prop}")
|
|
private static SomeDependency dependency; // non compliant, @Value will be ignored and no value will be injected
|
|
// ...
|
|
}
|
|
----
|
|
|
|
==== Compliant solution
|
|
|
|
[source,java,diff-id=1,diff-type=compliant]
|
|
----
|
|
@Component
|
|
public class MyComponent {
|
|
|
|
@Value("${my.app.prop}")
|
|
private final SomeDependency dependency;
|
|
// ...
|
|
}
|
|
----
|
|
|
|
== Resources
|
|
=== Articles & blog posts
|
|
* Java Guides - https://www.baeldung.com/spring-inject-static-field[Injecting a Value in a Static Field in Spring]
|