rspec/rules/S7180/java/rule.adoc

47 lines
1.4 KiB
Plaintext
Raw Normal View History

== Why is this an issue?
Annotating interfaces or interface methods with ``++@Cache*++`` annotations is not recommended by the official Spring documentation.
If you use the weaving-based aspect (mode="aspectj"), the ``++@Cache*++`` annotations will be ignored, and no caching proxy will be created.
=== What is the potential impact?
* *Confusing Code*: Developers may mistakenly believe that caching is in effect, leading to confusion and incorrect assumptions about application performance.
This rule raises an issue when an interface or an interface method is annotated with a ``++@Cache*++`` annotation.
== How to fix it
Move ``++@Cache*++`` annotation from interface or interface method to the concrete class.
=== Code examples
==== Noncompliant code example
[source,java,diff-id=1,diff-type=noncompliant]
----
public interface ExampleService {
@Cacheable("exampleCache") //non compliant, interface method is annotated with @Cacheable
String getData(String id);
}
----
==== Compliant solution
[source,java,diff-id=1,diff-type=compliant]
----
@Service
public class ExampleServiceImpl implements ExampleService {
@Cacheable("exampleCache")
@Override
public String getData(String id) {
// Implementation here
}
}
----
== Resources
=== Documentation
* Spring - https://docs.spring.io/spring-framework/reference/integration/cache/annotations.html#cache-annotation-enable[Declarative Annotation-based Caching]