@Retention(value=RUNTIME) @Target(value=TYPE) public @interface Priority
Annotates types with a priority value. The priority is split into two components:
ring()- A zero based numeric value where 0 is the highest priority ring, Integer.MAX_VALUE is the lowest priority ring.value()- A zero based numeric value where Integer.MAX_VALUE is the highest priority value, 0 is the lowest priority value.The Priority value of a type is used to choose which type to use when multiples types provide (via the Provides annotation) the same service.
@Priority
class Foo {...}
Redundant annotation, gives the type the default ring() and value() values. A log message should be produced at the WARNING level if a default Priority annotation is encountered as it likely indicates a coding error.
@Priority(1)
class Foo {...}
@Priority(2)
class Bar {...}
Type Bar will be chosen over type Foo because they belong to the same ring and Bar has a higher priority value than Foo.
@Priority(ring=0)
class Foo {...}
@Priority(ring=1)
class Bar {...}
Type Foo will be chosen over type Bar because Foo belongs to a higher priority ring than Bar.
@Priority(ring=3,value=9)
class Foo {...}
@Priority(ring=1,value=2)
class Bar {...}
Type Bar will be chosen over type Foo because Bar belongs to a higher priority ring than Foo.
public abstract int ring
Priority belongs to.public abstract int value
ring() classification. Priority Integer.MAX_VALUE is the highest priorityring()