I guess my method for new frameworks / languages / etc is sort of a combination of top down and bottom up. I start with very high level overview, followed by a very simple tutorial, then work my way up in the hands-on path, and work my way down in the reading and theory path. One reinforces the other, so the reading does not remain abstract, and the practical has context.
For an actual framework I always like to step thru a typical unit of work line by line in the debugger, from accept to write (I mostly do server processes). It is surprisingly illuminating to see how IO is managed and hoe the layers interact and fit together. It gives data to build a robust mental model of the framework. This is why I weep when I see some Spring backtracks with 100 or so stack layers.
It seems that good spring developers are able to work without a mental mode of the execution environment. Or they are much more able to hold 40 items in their working memory than I. (I have always been happier in smaller environments than larger, more Scheme than CL, more C than C++, python not perl, node but not npm, presently falling in love with Golang. I help my Java friends with OS or crypto knowledge but I don’t type much into their code base.