Similar to interceptors, but
intercept performs cross-cutting tasks, not business logic (general interceptor method); usually unaware of the specific type of intercepting target
decorators perform business logic by intercepting business methods (specific to a particular application); aware of the target type
Decorator class is
@Decorator annotated (javax.decorator)
Either (if @Priority used, no need to specify in beans.xml)
has decorators element in beans.xml <decorators><class>...</class></decorators>, or
use @Priority annotation to specify globally @Priority(Interceptor.Priority.XXX) - smaller value first invoke
has delegate injection point
can be a field, constructor parameter, or initializer method parameter of the decorator class
@Inject @Delegate @Qualifier annotated
can be declared an abstract class so not have to implement all business methods of the interface
interceptors are invoked first than decorators