After many days of beating my head against the wall, I have determined this is just not possible. My solution was to create copies of all the objects as a mutable version, then spring injects the settings into a mutable object using setters, which works for both 2 and 3. The I copy settings from the mutable object to the immutable objects at startup