A property accessor is able to read from (and possibly write to) an object's properties.
This interface places no restrictions, and so implementors are free to access properties
directly as fields or through getters or in any other way they see as appropriate.
A resolver can optionally specify an array of target classes for which it should be
called. However, if it returns null from getSpecificTargetClasses(),
it will be called for all property references and given a chance to determine if it
can read or write them.
Property resolvers are considered to be ordered and each will be called in turn.
The only rule that affects the call order is that any naming the target class directly
in getSpecificTargetClasses() will be called first, before the general resolvers.