DependenciesService produces the set of model paths that point to parts of the model that the property depends on. A property listens on all of its dependencies and triggers refresh when any of the dependencies change.
Although custom implementations are supported, in most cases the supplied implementation that is configured via @DependsOn annotation should be sufficient.
Example
@DependsOn( "Name" )
ValueProperty PROP_ID = new ValueProperty( TYPE, "Id" );
Value<String> getId();
void setId( String value );
Other annotations, such as @NoDuplicates can also inject implied dependencies (via their own DependenciesService implementations). For instance, placing @NoDuplicates annotation on a Name property automatically adds "#/Name" dependency.
If declarative approach is not sufficient, a custom DependenciesService implementation can be supplied.
Example
public class CustomDependenciesService extends DependenciesService
{
@Override
protected DependenciesServiceData compute()
{
// Compute the list of dependencies.
List<ModelPath> dependencies = new ArrayList<ModelPath>();
...
return new DependenciesServiceData( dependencies );
}
}
@Service( impl = CustomDependenciesService.class )
ValueProperty PROP_NAME = new ValueProperty( TYPE, "Name" );
Value<String> getName();
void setName( String value );