Bouncing is not an issue for quadrature encoders since if you respect every transition you will not lose precise lock with the position.
And you have to deal with one count jitter anyway as when parked an encoder can sometimes jitter between two neighbouring states when it happens to be on the edge.
I see there being two basic ways to handle encoders in software - one is interrupt driven (good for fast encoders like shaft encoders).
The other is regular polling (works for slow encoders like rotary input encoder switches). So long as the polling is faster than the max transition rate of the encoder this will not lose lock (ignoring contact bounce). It may hide some of the contact bounce, but it doesn't matter if it doesn't because as I said you always need to handle +/-1 count jitter gracefully anyway.
For rotary input encoders I would suggest adding 1 count hysteresis to the value reported back to the main program - typical rotary encoders go through 4 transitions (complete 360 degrees of quadrature) per detent so this isn't going to lose resolution.