I presume you mean "Dependency Injection" when you say "DI".
Autowiring refers to the ability for Spring to find a bean and inject (using DI) it into the property of another bean based on its name. For example, if I have a bean named "dbConnection" and I have autowiring in effect for a bean named "PaycheckDAO" which supports dependency injection by providing a property setter named "setDbConnection", Spring will automatically inject dbConnection by calling setDbConnection automatically when it constructs the PaycheckDAO.
Without Autowiring, you'd have to explicitly tell Spring if you wanted this dependency injection - typically by coding a property reference in the bean configuration for the PaycheckDAO bean. Unlike Autowiring, the explicit property injection doesn't assume/require that the name of the property and the injected bean names have to match.
Autowiring is very powerful and very dangerous. Powerful, because it can really cut down on how much configuration you have to code, dangerous because since the configuration isn't explicitly coded, it isn't obvious what's being done. People can get into some serious arguments pro/con autowiring. For myself, I generally prefer explicit (manual) wiring, but I do have certain cases where it's advantageous to just let it autowire.
These capabilities date pretty far back into Spring's history, so the changes between releases are fairly minor. The major difference is that more recent versions of Spring support an @Autowire property annotation so that you don't have to code autowiring into the Spring configuration file(s).
Sometimes the only way things ever got fixed is because people became uncomfortable.