X-Git-Url: https://juplo.de/gitweb/?p=percentcodec;a=blobdiff_plain;f=accelerator%2Fsrc%2Fmain%2Fjava%2Fde%2Fjuplo%2Faccelerator%2Fannotations%2FCacheable.java;fp=accelerator%2Fsrc%2Fmain%2Fjava%2Fde%2Fjuplo%2Faccelerator%2Fannotations%2FCacheable.java;h=a5960fc3a8e116dc942f7d1b7c783a104737ee4e;hp=0000000000000000000000000000000000000000;hb=a6e0e65cce68acb20abc6ca935471611a740c342;hpb=1d395c6002486d485bde0d5dc713886d70bd3f8a diff --git a/accelerator/src/main/java/de/juplo/accelerator/annotations/Cacheable.java b/accelerator/src/main/java/de/juplo/accelerator/annotations/Cacheable.java new file mode 100644 index 00000000..a5960fc3 --- /dev/null +++ b/accelerator/src/main/java/de/juplo/accelerator/annotations/Cacheable.java @@ -0,0 +1,45 @@ +package de.juplo.accelerator.annotations; + + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +/** + * Marker-Annotation für Handler (i.A. eine Impelementierung von + * {@link Controller}), deren Antworten vom {@link CachingInterceptor} mit + * HTTP/1.1-Caching-Header nach + * {@linkplain http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html RFC 2616} + * dekoriert werden sollen. + *
+ * Wenn der Parameter eager
auf true
gesetzt wird,
+ * ermittelt der {@link CachingInterceptor} die Cache-Parameter über die
+ * annotierten Methoden vorab.
+ * Achtung:
+ * Dies bedeutet, dass die annotierten Methoden aufgerufen werden bevor
+ * die eigentliche Verarbeitungs-Routine der markierten Klasse aufgerufen wird!
+ * Wenn sich dabei ergiebt, dass die Antwort nicht erneut ausgeliefert werden
+ * muss, wird die eigentliche Verarbeitungs-Routine gar nicht aufgerufen.
+ *
+ * Wenn der Parameter eager
nicht gesetzt ist (oder explizit auf
+ * false
gesetzt wurde), kapselt der {@link CachingInterceptor}
+ * den Request und den Ausgabestrom für den Response-Body und trifft die
+ * Entscheidung über die zu ergänzenden Header, wenn der Status des
+ * {@link HttpServletResponse} gesetzt oder mit dem Schreiben des Response-Body
+ * begonnen wird.
+ *
+ * @see CacheControl
+ * @see Accepts
+ * @see CacheSeconds
+ * @see LastModified
+ * @see ETag
+ * @see CacheControl
+ * @author kai
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface Cacheable {
+ boolean eager() default false;
+}