Caching ist ein sehr wichtiger Aspekt - insbes. im heutigen Microservices-Hype. Die Implementierung eines Caches sollte man i. a. aber nicht selber in die Hand nehmen ... es fängt meistens recht trivial an, aber wird dann schnell buggy.
Für Caching würde ich versuchen, vorhandene Bibliotheken einzusetzen.
Guava-Cache
Hierüber läßt sich Caching annotationsbasiert abbilden.