Bruce Tate in a developerWorks article:
The Java community’s obsession with static type checking is curious because Java developers are now spending an ever-increasing amount of energy looking for ways to delay binding. Sometimes, the approaches are successful. Frameworks such as Spring exist primarily to delay binding, which loosens the coupling between client and service. Aspect-oriented programming allows delayed binding by providing services that extend a class beyond its current capabilities. Frameworks like Hibernate delay binding, adding persistence capabilities to plain, ordinary Java objects (POJOs) at run time through reflection, proxies, and other tools. Popular books teach developers how to program with POJOs, often moving beyond reflection with increasingly complex techniques essentially used to open up a class and delay binding, effectively sidestepping static typing.
I’m not a big fan of Bruce Tate’s writings, especially his Beyond Java book, but I like this article very much.