protected void createNewInstance(Map<String, Object> objects, String name, String value) {

        Object currentInstance = objects.get(name);
        if (currentInstance != null) {
            LOGGER.info("An instance with name '{}' already exists.  "
                    + "Redefining this object as a new instance of type {}", name, value);
        }

        //name with no property, assume right hand side of equals sign is the class name:
        Object instance;
        try {
            instance = ClassUtils.newInstance(value);
            if (instance instanceof Nameable) {
                ((Nameable) instance).setName(name);
            }
        } catch (Exception e) {
            instance = alternateObjectSupplier.apply(value);
            if (instance == null) {
                String msg = "Unable to instantiate class [" + value + "] for object named '" + name + "'.  "
                        + "Please ensure you've specified the fully qualified class name correctly.";
                throw new ConfigurationException(msg, e);
            }
        }
        objects.put(name, instance);
    }
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