Put role="status" and aria-live="polite" on the wrapper, along with a visually-hidden-if-you-like text like "Loading…". The spin animation itself is decorative and doesn't need to be announced, but the fact that loading is happening does need to reach the text.
The line against a progress bar is the determinate/indeterminate distinction covered above. The difference from a skeleton is that a spinner covers part or all of the screen and only announces "loading," while a skeleton previews the shape of the coming content to prevent layout shift and feel faster.
A spinner that flashes on and off within 200ms reads as a glitch, so it's often better to skip showing one at all if the load is likely to finish that quickly.