javax.decorator
Date: 2015-09-11

# Package javax.decorator

Annotations relating to decorators.

See: Description

- Annotation Types Summary
  Annotation Type | Description
  --- | ---
  Decorator | Specifies that a class is a decorator.
  Delegate | Identifies the delegate injection point of a decorator.

## Package javax.decorator Description

Annotations relating to decorators.

A decorator implements one or more bean types and intercepts business method invocations of beans which implement those bean types. These bean types are called decorated types.

A decorator is a managed bean annotated `@Decorator`.

Decorators are superficially similar to interceptors, but because they directly implement operations with business semantics, they are able to implement business logic and, conversely, unable to implement the cross-cutting concerns for which interceptors are optimized. Decorators are called after interceptors.

### Decorated types

The set of decorated types of a decorator includes all bean types of the managed bean that are Java interfaces, except for `Serializable`. The decorator bean class and its superclasses are not decorated types of the decorator. The decorator class may be abstract.

A decorator intercepts every method:

- declared by a decorated type of the decorator
- that is implemented by the bean class of the decorator.

A decorator may be an abstract class, and is not required to implement every method of every decorated type.

### Delegate injection points

All decorators have a delegate injection point. A delegate injection point is an injection point of the bean class annotated `@Delegate`.

The type of the delegate injection point must implement or extend every decorated type. A decorator is not required to implement the type of the delegate injection point.

### Enabled decorators

By default, a bean archive has no enabled decorators. A decorator must be explicitly enabled by listing its bean class under the `<decorators>` element of the `beans.xml` file of the bean archive. The order of the decorator declarations determines the decorator ordering. Decorators which occur earlier in the list are called first.

A decorator is bound to a bean if:

- The bean is eligible for injection to the delegate injection point of the decorator.
- The decorator is enabled in the bean archive of the bean.

If a managed bean class is declared final, it may not have decorators. If a managed bean has a non-static, non-private, final method, it may not have any decorator which implements that method.

A decorator instance is a dependent object of the object it decorates.

See Also:
  `javax.enterprise.inject`, `Decorator`, `Delegate`