Let's split this out into a substituteProps method that's implemented in AbstractAggregatorImpl, and a getPropValue method that is also implemented in AbstractAggregatorImpl, and gets the prop value from system properties, but is overridden by AggregatorImpl.  The AggregatorImpl implementation can first call the AbstractAggregatorImpl implementation, and if that doesn't provide a value then it can do it's thing with the IVariableResolver.