SCM-Daten ergänzt
[percentcodec] / accelerator / src / main / java / de / juplo / accelerator / annotations / Cacheable.java
1 package de.juplo.accelerator.annotations;
2
3
4 import java.lang.annotation.ElementType;
5 import java.lang.annotation.Retention;
6 import java.lang.annotation.RetentionPolicy;
7 import java.lang.annotation.Target;
8
9
10 /**
11  * Marker-Annotation für Handler (i.A. eine Impelementierung von
12  * {@link Controller}), deren Antworten vom {@link CachingInterceptor} mit
13  *  HTTP/1.1-Caching-Header nach
14  * {@linkplain http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html RFC 2616}
15  * dekoriert werden sollen.
16  * <p>
17  * Wenn der Parameter <code>eager</code> auf <code>true</code> gesetzt wird,
18  * ermittelt der {@link CachingInterceptor} die Cache-Parameter über die
19  * annotierten Methoden vorab.
20  * <strong>Achtung:</strong>
21  * Dies bedeutet, dass die annotierten Methoden aufgerufen werden <em>bevor</em>
22  * die eigentliche Verarbeitungs-Routine der markierten Klasse aufgerufen wird!
23  * Wenn sich dabei ergiebt, dass die Antwort nicht erneut ausgeliefert werden
24  * muss, wird die eigentliche Verarbeitungs-Routine <em>gar nicht aufgerufen</em>.
25  * <p>
26  * Wenn der Parameter <code>eager</code> nicht gesetzt ist (oder explizit auf
27  * <code>false</code> gesetzt wurde), kapselt der {@link CachingInterceptor}
28  * den Request und den Ausgabestrom für den Response-Body und trifft die
29  * Entscheidung über die zu ergänzenden Header, wenn der Status des
30  * {@link HttpServletResponse} gesetzt oder mit dem Schreiben des Response-Body
31  * begonnen wird.
32  *
33  * @see CacheControl
34  * @see Accepts
35  * @see CacheSeconds
36  * @see LastModified
37  * @see ETag
38  * @see CacheControl
39  * @author kai
40  */
41 @Retention(RetentionPolicy.RUNTIME)
42 @Target(ElementType.TYPE)
43 public @interface Cacheable {
44   boolean eager() default false;
45 }