I tried to migrate an existing spring application from 3.0.5 to 3.1.2 and I've noticed a strange bug, that the injection of a provider works the first time but passes subsequent times.
It seems due the call of DependencyDescriptor.increaseNestingLevel() in the constructor of DependencyObjectFactory. Since the Descriptor is cached, the subsequent calls to BeanFactory.resolveDependency no longer return a Provider, but a reference to the bean.
I've attached a testcase, which reproduces the problem. The bug seems to be introduced in 3.1.1, according to my tests.