private void setProperty(Object object, String propertyPath, Object value) {
        try {
            if (LOGGER.isTraceEnabled()) {
                LOGGER.trace("Applying property [{}] value [{}] on object of type [{}]",
                        new Object[] {propertyPath, value, object.getClass().getName()});
            }
            beanUtilsBean.setProperty(object, propertyPath, value);
        } catch (Exception e) {
            String msg = "Unable to set property '" + propertyPath + "' with value [" + value + "] on object "
                    + "of type " + (object != null ? object.getClass().getName() : null) + ".  If "
                    + "'" + value + "' is a reference to another (previously defined) object, prefix it with "
                    + "'" + OBJECT_REFERENCE_BEGIN_TOKEN + "' to indicate that the referenced "
                    + "object should be used as the actual value.  "
                    + "For example, " + OBJECT_REFERENCE_BEGIN_TOKEN + value;
            throw new ConfigurationException(msg, e);
        }
    }
Plug in another way to get objects into configuration, ex: CDI

@param alternateObjectSupplier not null (empty lambda ok)
@since 2.0
config/ogdl/src/main/java/org/apache/shiro/config/ogdl/ReflectionBuilder.java