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; +}