I'm okay with it, just concerned about making the configuration more and more complex from an end-user's point of view. What do others think?
I think it's great idea to have switches for different parts of the configurations. From user stand point, It's logically intuitive that using a feature requires turing on the switch and configuring it.
What's the default for these, and what's the behavior if the feature is enabled, but not configured?
My inclination would be that they are enabled by default, but nothing bad (i.e. nothing more than an INFO level log message) happens if the relevant feature isn't configured. Effect is you only need to add the new attribute to your config if you want to *turn off* the feature.
Default is no eviction and no cache loader. Turning on eviction by default is not a good idea since it involves a separate eviction timer thread. So we would only create it if user wants it in the first place.
Besides the switches, other thing is if we externalize the interceptor stacks in the next 2.0 release, for example. Then, the interceptor such as EvictionInterceptor, StoreInterceptor can also act as a switch as well, albeit it not that explicitly.