The necessity of intellij just shows how much Javas type system is abused. I don’t know what it is about java but you see the craziest types in codebases: IAbstractBeanFactoryResolverInjector<IDisplayableAppletResolverInjector>
Is that the type system's fault or the whole Spring/dependency injection fault? You're using a typed language and making it behave in dynamic ways when using Spring (at least that's the impression I had when I looked at Spring).