Vorwort und Einleitung | 7 |
Inhalt | 11 |
Teil 1: Java-Grundlagen | 17 |
1 Generics | 19 |
1.1 Einleitung und Motivation | 19 |
1.2 Erste Beispiele | 21 |
1.3 Mehrere Typparameter | 24 |
1.4 Einschränkung parametrisierter Typen | 24 |
1.5 Umsetzung des Generics-Konzepts | 25 |
1.6 Typenkompatibilität und Wildcards | 27 |
1.6.1 Rohe Typen | 29 |
1.6.2 Wildcards | 29 |
1.7 Vererbung | 32 |
1.8 Generische Methoden | 34 |
1.9 Überladen und Überschreiben | 37 |
1.10 Fazit | 40 |
2 Reflection | 41 |
2.1 Grundlagen von Reflection | 42 |
2.1.1 Die Klasse Class | 42 |
2.1.2 Die Klasse Field | 44 |
2.1.3 Die Klasse Method | 45 |
2.1.4 Die Klasse Constructor | 46 |
2.1.5 Beispiel | 47 |
2.1.6 Anwendungen | 48 |
2.2 Reflection mit Generics | 50 |
2.2.1 Reflection-Typsystem | 51 |
2.2.2 Zusätzliche Methoden in Reflection-Klassen | 53 |
2.2.3 Beispiel | 53 |
3 Annotationen | 59 |
3.1 Deklaration und Nutzung von Annotationen | 59 |
3.2 Meta-Annotationen | 62 |
3.3 Regeln für Annotationsdeklarationen | 64 |
3.4 Reflection für Annotationen | 65 |
3.5 Beispiel | 69 |
3.6 Anwendung: Dependency Injection | 71 |
4 Dynamische Proxies | 75 |
4.1 Statische Proxies | 76 |
4.2 Erzeugung dynamischer Proxies mit Reflection | 81 |
4.3 Erzeugung dynamischer Proxies mit CGLIB | 85 |
5 ClassLoader und Hot Deployment | 90 |
5.1 Klassenladen in Java | 90 |
5.2 ClassLoader | 92 |
5.3 Beispiele | 94 |
5.3.1 Hot Deployment | 94 |
5.3.2 Gleichzeitige Nutzung mehrerer Versionen einer Klasse | 96 |
Teil 2: Java-Komponenten | 101 |
6 Prototypische Implementierung eines Komponentensystems | 103 |
6.1 Beispielkomponenten | 104 |
6.1.1 Komponente Nr. 1 | 104 |
6.1.2 Komponente Nr. 2 | 107 |
6.1.3 Komponente Nr. 3 | 109 |
6.1.4 Rückblick | 112 |
6.1.5 Variation der Komponentenbeispiele | 113 |
6.2 Framework | 115 |
6.2.1 Struktur des Komponenten-Frameworks | 115 |
6.2.2 Die Klasse ComponentManager | 117 |
6.2.3 Die Klasse DeploymentDirectoryListener | 122 |
6.2.4 Restliche Klassen | 123 |
7 Komponenten und Komponentensysteme | 125 |
7.1 Modularität als grundlegendes Prinzip von Komponentensystemen | 125 |
7.2 Definitionen für Software-Komponenten | 127 |
7.3 Eigenschaften von Java-Komponenten | 129 |
7.4 Beispiele und Gegenbeispiele für Komponentensysteme | 132 |
7.4.1 Beispiele aus dem Java-Umfeld | 132 |
7.4.2 Gegenbeispiele aus dem Java-Umfeld | 133 |
7.4.3 Beispiele aus dem Nicht-Java-Umfeld | 133 |
Teil 3: Beispiele für Java- Komponentensysteme | 135 |
8 Java Beans | 137 |
8.1 Komponentenmodell | 137 |
8.2 Gebundene Eigenschaften und Eigenschaften mit Vetomöglichkeit | 139 |
8.3 BeanInfo | 142 |
8.4 Software-Werkzeuge | 144 |
8.5 Bewertung | 145 |
9 OSGi | 147 |
9.1 Komponentenmodell | 147 |
9.2 Erstes Beispiel-Bundle | 149 |
9.3 Zweites Beispiel-Bundle | 153 |
9.4 Variationen der Beispiel-Bundles | 156 |
9.5 Hot Deployment | 158 |
9.6 Lebenszyklus von Komponenten | 162 |
9.7 BundleContext und Bundle | 163 |
9.8 Erweiterungen von OSGi | 164 |
9.8.1 Declarative Services | 164 |
9.8.2 Zusätzliche Erweiterungen | 168 |
9.9 Versionen von Komponenten | 169 |
9.10 Bewertung | 170 |
10 Eclipse | 172 |
10.1 Architektur von Eclipse | 173 |
10.1.1 Eclipse-Funktionsgruppen | 173 |
10.1.2 Workspace und Workbench | 174 |
10.1.3 Erweiterungspunkte (Extension Points) | 175 |
10.2 Komponentenmodell von Eclipse | 176 |
10.3 Erstes Eclipse-Plugin | 177 |
10.4 Weitere Eclipse-Plugins | 183 |
10.5 Erweiterung der Eclipse-Plugins | 184 |
10.6 Klassenladen bei Bedarf | 185 |
10.7 Bewertung | 187 |
11 Applets | 188 |
11.1 Erstes Beispiel | 188 |
11.2 Zweites Beispiel | 191 |
11.3 Bewertung | 194 |
12 Servlets | 195 |
12.1 Verzeichnisstruktur eines Web-Servers | 195 |
12.2 Komponentenmodell | 196 |
12.2.1 Verzeichnisstruktur einer Komponente | 196 |
12.2.2 Die Konfigurationsdatei web.xml | 198 |
12.2.3 Java-Code einer Web-Komponente | 199 |
12.3 Erste Beispielkomponente | 203 |
12.4 Zweite Beispielkomponente | 207 |
12.5 Bewertung | 212 |
13 Enterprise Java Beans (EJB) | 214 |
13.1 Mehrschichtige Architekturen | 214 |
13.2 Interaktion mit EJB-Komponenten | 216 |
13.3 Klassenarten einer EJB-Komponente | 218 |
13.4 Session Beans | 218 |
13.4.1 Stateful Session Beans | 218 |
13.4.2 Stateless Session Beans | 219 |
13.4.3 Singleton Session Beans | 220 |
13.5 Komponentenmodell | 221 |
13.6 Erste EJB-Beispielkomponente | 222 |
13.6.1 Server-Seite | 222 |
13.6.2 Client-Seite | 224 |
13.7 Zweite EJB-Beispielkomponente | 227 |
13.8 Dritte EJB-Beispielkomponente (Call-By-Value) | 230 |
13.9 Vierte EJB-Beispielkomponente (Call-By-Reference) | 232 |
13.9.1 Getrennte EJB-Jar-Dateien | 232 |
13.9.2 Gemeinsame Ear-Datei mit Dependency Injection | 235 |
13.9.3 Lokale Schnittstellen | 236 |
13.10 Entities und Transaktionssteuerung | 237 |
13.11 Funktionen eines EJB-Containers | 240 |
13.12 Bewertung | 241 |
14 Spring | 242 |
14.1 Komponentenmodell | 242 |
14.2 Erste Spring-Anwendung: Singletons und Prototypes | 244 |
14.3 Zweite Spring-Anwendung: Dependency Injection | 246 |
14.4 Factory-Methoden und Factory-Beans | 248 |
14.5 Autowiring | 248 |
14.6 Dritte Spring-Anwendung: Konfiguration durch Annotationen | 249 |
14.7 Vierte Spring-Anwendung: BeanPostProcessor | 250 |
14.8 Aspektorientierte Programmierung (AOP) | 253 |
14.9 Fünfte Spring-Anwendung: AOP | 254 |
14.10 Bewertung | 257 |
15 Ereignisbusse | 259 |
15.1 Grundkonzepte von Ereignisbussen | 259 |
15.2 Komponentenmodell von RRiBbit | 261 |
15.3 Erste RRiBbit-Anwendung | 263 |
15.4 Zweite RRiBbit-Anwendung | 266 |
15.5 Bewertung | 269 |
16 Android | 271 |
16.1 Software-Architektur von Android | 272 |
16.2 Prinzipien der Ausführung von Apps | 273 |
16.3 Komponentenmodell | 277 |
16.4 Anwendung mit einer Activity | 279 |
16.4.1 Activity mit programmierter Oberfläche | 279 |
16.4.2 Activity mit XML-definierter Oberfläche | 281 |
16.5 Anwendung mit mehreren Activities | 284 |
16.5.1 Start einer Activity mit explizitem Intent | 284 |
16.5.2 Start einer Activity mit implizitem Intent | 286 |
16.5.3 Activity mit Resultat | 287 |
16.5.4 Variationen | 289 |
16.6 Lebenszyklus von Activities | 290 |
16.7 Service und Activity im Vergleich | 292 |
16.8 Anwendung mit einem ungebundenen Service | 293 |
16.9 Anwendung mit einem gebundenen Service | 296 |
16.9.1 AIDL-Schnittstelle | 296 |
16.9.2 Implementierung einer AIDL-Schnittstelle | 296 |
16.9.3 Realisierung eines gebundenen Service | 297 |
16.9.4 Nutzung eines gebundenen Service | 298 |
16.9.5 Parameterübergabe durch Call-By-Value-Result | 300 |
16.9.6 Parameterübergabe durch Call-By-Reference | 302 |
16.10 Bewertung | 305 |
Literatur | 307 |
Index | 309 |