Package org.seedstack.business.domain
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.Qualifierannotation 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; }