Frage ich viele erfahrene Java-Kollegen (teilweise Projektleiter!) „was denn der Unterschied zwischen einer Library und Framework sei?“, erhalte ich meistens die falsche Antwort: „Es ist eine Sammlung von Bibliotheken die ein bestimmtes Thema umfassen.“.

Benutzung einer Library
Wenn wir eine Bibliothek (API) benutzen, rufen wir für gewöhnlich selbst den Code auf. Unser Programm entscheidet wann und wo wir API-Code aufrufen. Der Kontrollfluss geht von der oberen zur unteren Schicht. Das ist erstmal nichts schlechtes, so lange wir uns der Abhängigkeit zu dieser API bewusst sind.

Benutzung eines Framework
Anders bei einem Framework: Wir geben einer API die Aufrufkontrolle.
Unser Programm hat bestimmte Funktionen und Klassen, registriert diese dann beim Framework und irgendwann werden sie von diesem aufgerufen.
Was die Frameworks machen, hat sich unter dem Begriff Inversion of Control-Prinzip (Umkehrung der Kontrolle) etabliert, kurz IoC. Vor dem Aufkommen des Architektur- und Pattern-Hypes nannte man diese Methodik schärzhaft das Hollywood-Prinzip:
„Don’t call us, we’ll call you!“.
Damit sollte endgültige klar werden, was ein Framework ausmacht.
Zum Thema IoC werde ich in nächster Zeit mehr und genaueres schreiben.