Spring raises the abstraction level of the programming model by providing transparent services that uses a lot of aop "magic" behind the scene.
The problem is that that abstraction level is not maintained in all aspects of the development and the magic plumbing leaks sometimes:
when debugging, a programmer is totally exposed to that plumbing and it can be overwhelming:
1. Scoped bean: inspecting the state of scoped bean proxy is useless right now. One has to know that the proxy implements ScopedObject and call getTargetObject() to retrieve the real bean
2. Advised calls: invoking a method on any dynamic proxy (cglib or jdk) with interceptors mean that the developer has to step through 20-30 invocations in order to get to the advised call.
Solution: IDEA provide a way to hide these:
1. automatically dereference a proxy to show the real state,
2. hide all spring/cglib/jdk plumbing methods to only show business methods and application interceptors.
Related to IDEA-15173