"which misses the point of DI. There has to be a setter or the framework (Spring/JBossMC) can't set a value in the first place. The startup IS programmatic. Even our standalone propertyFile->Bean loading works by reflection on the setters now."
There are some properties that simply cannot be changed once the system is running. So if we must have setters they should do nothing or print a warning and do nothing.