The requirement for a spring that looks right in an animation has always caused a lot of effort.
One 'dirty' method is to pattern a spring within a single part.
Each instance can be controlled by relations to extend or compress as required.
The distance between each instance should be bigger than your complete assembly and moved with each regeneration to be indexed into the correct frame.
The starting requirement is then, the total number of frames and the total spring travel.
Be sure not to just make the spring increase/decrease in length as the number of coils will change; the spring model should regenerate with the same total number of coils, but with a varying pitch.
The same technique can be used to make a cable follow a very complicated 3d extension / retraction in an animation.
The reason this method works is that during most animations, only the assembly positions are regenerated, not the individual part models.
The spring icon in mdo needs its bases covering to hide the lack of closed and ground ends. This of course limits the use of the icon for more accurate appearance in an animation.