To learn a language, read and understand its specification. Then learn the tooling and libs that come with the compiler. Then just start reading other people's source from wherever while you write your own stuff. Reading the standard lib is helpful, ad is reading the source of any framework, but you have to know the language spec well for it to make sense.
Aside from the fact that the two are not mutually exclusive but rather fit a DE,D!E,!DE,!D!E pairing resulting in a higher number of non-doer (!D) educated (E) people in industry, the statement is quite on point. Being a doer implies that you will by definition get more out of an education.
In your example, read the spring manual. You need the inference to help spring generate proxies for your service class. You could use cglib to remove this requirement but it's the way the spring API has been for ages. Also using an interface let's you easily mock things out and write dummy test implementations. Pretty valuable.