"Configuration" means many different things to many different people. There are
a myriad of libraries that handle configuration, and many of them mean something
different. For instance, basic Properties files provide a somewhat nested
key-value pair style configuration, while
Apache Commons Configuration basically provides
multiple ways to specify hierarchies of properties. On the other hand, if we
look at a project like tofigurator, we see a strategy to build
up an object graph. We also see similar configuration strategies if we look at
the shiro.ini file in Apache Shiro, or the Jetty
configuration, or most any of the logging frameworks.
gaffer fulfills this second style of configuration, meant to be used to
configure application components that require or allow for complex object graph
instantiation. It provides a more flexible, less verbose, and more intuitive
syntax than tofigurator. Inspiration (and a good bit of code)
has been drawn from logback's groovy configuration mechanism.
The general idea with gaffer is to take the ideas in the logback groovy
configuration and make a set of utilities generic enough to allow for the same
general style of configuration in any library.