The Constraint will co-operate with a custom annotation, which is used to mark which method argument to be linked to the Constraint. The annotation can also contain arguments, for instance to provide range checks.
The Constraint will be provided the annotation and the value that is passed in the method.
The Constraint simply returns true if the argument is Ok, and otherwise false. It should avoid throwing exceptions.