package org.jboss.seam.annotations.intercept;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
/**
* Annotates an interceptor class and specifies what
* kind of interceptor it is (client side or server
* side), and its ordering with respect to other
* interceptors in the stack.
*
* @author Gavin King
*/
@Target(TYPE)
@Retention(RUNTIME)
@Documented
public @interface Interceptor
{
/**
* Specifies that the interceptor is a SERVER or CLIENT
* side interceptor.
*
* @return SERVER by default
*/
InterceptorType type() default InterceptorType.SERVER;
/**
* Specifies that an interceptor is called "around"
* another interceptor or interceptors.
*/
Class[] around() default {};
/**
* Specifies that an interceptor is called "within"
* another interceptor or interceptors.
*/
Class[] within() default {};
/**
* Performance optimization for stateless interceptors.
*/
boolean stateless() default false;
}