Annotation Type DomainPolicy


  • @Documented
    @Retention(RUNTIME)
    @Target({TYPE,ANNOTATION_TYPE})
    public @interface DomainPolicy
    A policy is used to encapsulate a varying business rule or process in a separate object. Multiple versions of the policy object represent different ways the process can be done.

    This annotation can be applied to an interface to declare a domain policy. Any class implementing the annotated interface will be registered by the framework as an implementation of this policy.

    When a policy interface has multiple implementations, it is necessary to differentiate them by using a different javax.inject.Qualifier annotation on each. This qualifier can then be used at the injection point to specify which implementation is required.

    Considering the following policy:

     @DomainPolicy
      public interface SomePolicy {
         double computeSomething(String someParameter);
      }
     
    Two different implementations can be declared as follows:
     @Named("variantA")
      public class SomePolicyVariantA {
         @Override
          public double computeSomething(String someParameter) {
              // implement variant A logic
          }
      }
    
     @Named("variantB")
      public class SomePolicyVariantB {
         @Override
          public double computeSomething(String someParameter) {
              // implement variant B logic
          }
      }
     
    The "B variant" implementation can then be injected as follows:
     public class SomeClass {
         @Inject
         @Named("variantB")
          SomePolicy somePolicy;
     }