Suchen und Finden
Inhalt
7
Vorwort
17
Vorwort zur deutschen Ausgabe
19
Einleitung
21
Danksagungen
25
Über dieses Buch
27
Aufbau
27
Wer sollte dieses Buch lesen?
28
Code-Konventionen
28
Aktualisierungen
29
Die Autoren
31
1 Ihr Weg zu Groovy
33
1.1 Die Groovy-Story
34
1.1.1 Was ist Groovy?
35
1.1.2 Gutes Zusammenspiel mit Java: nahtlose Integration
36
1.1.3 Power in Ihrem Code: eine reichhaltige Sprache
37
1.1.4 Community-gesteuert, aber von Unternehmen gestützt
40
1.2 Was Groovy für Sie tun kann
41
1.2.1 Groovy für Java-Profis
41
1.2.2 Groovy für Skriptprogrammierer
42
1.2.3 Groovy für pragmatische, extreme und agile Programmierer
43
1.3 Groovy ausführen
44
1.3.1 „Hello World“ auf groovysh
44
1.3.2 Die groovyConsole
47
1.3.3 Der Befehl groovy
48
1.4 Groovy kompilieren und ausführen
49
1.4.1 Groovy mit groovyc kompilieren
50
1.4.2 Ein kompiliertes Groovy-Skript mit Java ausführen
50
1.4.3 Kompilieren und Ausführen mit Ant
51
1.5 IDE- und Editor-Unterstützung für Groovy
52
1.5.1 Das Plugin für IntelliJ IDEA
53
1.5.2 Das Eclipse-Plugin
53
1.5.3 Groovy-Unterstützung in anderen Editoren
54
1.6 Zusammenfassung
55
Teil 1 Die Programmiersprache Groovy
57
2 Die Ouvertüre: Groovy-Grundlagen
59
2.1 Allgemeines Aussehen des Codes
59
2.1.1 Kommentare in Groovy
60
2.1.2 Vergleich der Syntax von Groovy und Java
60
2.1.3 Kurz und gut
61
2.2 Testen der Sprache durch Zusicherungen
62
2.3 Groovy auf einen Blick
64
2.3.1 Klassen deklarieren
65
2.3.2 Verwendung von Skripten
65
2.3.3 GroovyBeans
66
2.3.4 Umgang mit Text
67
2.3.5 Zahlen sind Objekte
69
2.3.6 Listen, Maps und Ranges
69
2.3.7 Code als Objekt: Closures
72
2.3.8 Groovy-Kontrollstrukturen
74
2.4 Groovys Platz in der Java-Umgebung
75
2.4.1 Meine Klasse ist deine Klasse
76
2.4.2 GDK: Die Groovy-Bibliothek
77
2.4.3 Der Groovy-Lebenszyklus
78
2.5 Zusammenfassung
81
3 Die einfachen Groovy-Datentypen
83
3.1 Objekte, Objekte überall
83
3.1.1 Das Typsystem von Java: Basistypen und Referenztypen
84
3.1.2 Die Antwort ist Groovy – alles ist ein Objekt
84
3.1.3 Zusammenwirken mit Java – automatisches Boxing und Unboxing
86
3.1.4 Kein zwischengeschaltetes Unboxing
87
3.2 Das Konzept der optionalen Typisierung
88
3.2.1 Typen zuweisen
88
3.2.2 Statische versus dynamische Typisierung
89
3.3 Operatoren überschreiben
90
3.3.1 Überschreibbare Operatoren
90
3.3.2 Überschriebene Operatoren in Aktion
92
3.3.3 Automatische Typumwandlung
93
3.4 Umgang mit Strings
95
3.4.1 Varianten von Stringliteralen
95
3.4.2 Der Umgang mit GStrings
98
3.4.3 Von Java zu Groovy
99
3.5 Arbeiten mit regulären Ausdrücken
102
3.5.1 Angabe von Patterns in Stringliteralen
103
3.5.2 Anwendung von Patterns
105
3.5.3 Patterns in Aktion
107
3.5.4 Patterns und Performance
109
3.5.5 Patterns für die Klassifizierung
110
3.6 Arbeiten mit Zahlen
111
3.6.1 Automatische Typumwandlung mit numerischen Operatoren
111
3.6.2 GDK-Methoden für numerische Typen
113
3.7 Zusammenfassung
114
4 Die mengenwertigen Groovy-Datentypen
117
4.1 Der Umgang mit Ranges
118
4.1.1 Ranges spezifizieren
119
4.1.2 Ranges sind Objekte
120
4.1.3 Ranges in Aktion
121
4.2 Der Umgang mit Listen
123
4.2.1 Listen angeben
123
4.2.2 Der Umgang mit Listenoperatoren
124
4.2.3 Verwenden von Listenmethoden
127
4.2.4 Listen in Aktion
131
4.3 Der Umgang mit Maps
133
4.3.1 Maps angeben
133
4.3.2 Verwendung von Map-Operatoren
135
4.3.3 Maps in Aktion
139
4.4 Hinweise zu Groovy-Collections
140
4.4.1 Nebenläufige Änderungen
141
4.4.2 Der Unterschied zwischen Kopier- und Änderungs-Semantik
141
4.5 Zusammenfassung
142
5 Closures
143
5.1 Eine sanfte Einführung in Closures
144
5.2 Ein Fall für Closures
145
5.2.1 Verwendung von Iteratoren
145
5.2.2 Ressourcenbehandlung
146
5.3 Deklarieren von Closures
149
5.3.1 Die einfache Deklaration
149
5.3.2 Zuweisungen zur Deklaration verwenden
150
5.3.3 Methoden als Closures referenzieren
151
5.3.4 Die verschiedenen Möglichkeiten im Vergleich
153
5.4 Verwendung von Closures
154
5.4.1 Aufrufen einer Closure
154
5.4.2 Weitere Closure-Methoden
156
5.5 Gültigkeitsbereiche
159
5.5.1 Der einfache Gültigkeitsbereich einer Variablen
160
5.5.2 Der allgemeine Gültigkeitsbereich von Closures
161
5.5.3 Gültigkeitsbereiche: der klassische Akkumulator-Test
164
5.6 Rückgabe aus Closures
165
5.7 Unterstützung für Entwurfsmuster
166
5.7.1 Beziehung zum Besuchermuster
167
5.7.2 Beziehung zum Erbauermuster
167
5.7.3 Beziehung zu anderen Mustern
168
5.8 Zusammenfassung
169
6 Groovy-Kontrollstrukturen
171
6.1 Die Groovy-Wahrheit
171
6.1.1 Boolesche Tests auswerten
172
6.1.2 Zuweisungen in Booleschen Tests
173
6.2 Bedingte Ausführung
175
6.2.1 Die ganz bescheidene if-Anweisung
175
6.2.2 Der Bedingungsoperator ?:
176
6.2.3 Die switch-Anweisung
176
6.2.4 Plausibilitätsprüfung mit Zusicherungen
179
6.3 Schleifen
183
6.3.1 while-Schleifen
183
6.3.2 for-Schleifen
183
6.4 Blöcke und Methoden abbrechen
186
6.4.1 Normale Beendigung: return/break/continue
186
6.4.2 Exceptions: throw/try-catch-finally
187
6.5 Zusammenfassung
188
7 Dynamische Objektorientierung nach Groovy-Art
189
7.1 Definieren von Klassen und Skripten
190
7.1.1 Definieren von Feldern und lokalen Variablen
190
7.1.2 Methoden und Parameter
193
7.1.3 Mit dem Operator ?. sicher dereferenzieren
197
7.1.4 Konstruktoren
198
7.2 Organisieren von Klassen und Skripten
201
7.2.1 Beziehung zwischen Datei und Klasse
201
7.2.2 Organisieren von Klassen in Packages
202
7.2.3 Weitere Überlegungen zum Klassenpfad
206
7.3 Fortgeschrittene OO-Merkmale
207
7.3.1 Vererbung
207
7.3.2 Interfaces
208
7.3.3 Multimethoden
209
7.4 GroovyBeans
211
7.4.1 Deklaration von Beans
211
7.4.2 Umgang mit Beans
213
7.4.3 Bean-Methoden für alle Objekte
216
7.4.4 Felder, Zugriffsmethoden, Maps und Expando
217
7.5 Power-Features
218
7.5.1 Objekte mit GPaths abfragen
219
7.5.2 Den Spread-Operator injizieren
223
7.5.3 Kategorienmix mit use
223
7.6 Meta-Programmierung in Groovy
226
7.6.1 Das Konzept der MetaClass
226
7.6.2 Methoden aufrufen und abfangen
228
7.6.3 Abfangen von Methoden
230
7.7 Zusammenfassung
233
Teil 2 Die Groovy-Bibliothek
235
8 Builder
237
8.1 Learning by doing – Verwendung eines Builders
238
8.2 Erstellen von Objektbäumen mit NodeBuilder
241
8.2.1 NodeBuilder in Aktion – der Builder-Code
242
8.2.2 Das Builder-Konzept
243
8.2.3 Intelligente Builder mit Logik
244
8.3 Arbeiten mit MarkupBuilder
246
8.3.1 Erstellen von XML
246
8.3.2 Erstellen von HTML
247
8.4 Aufgaben automatisieren mit AntBuilder
249
8.4.1 Von Ant-Skripten zu Groovy-Skripten
250
8.4.2 Wie AntBuilder funktioniert
251
8.4.3 Intelligente Automatisierungsskripte mit Logik
252
8.5 GUIs ganz easy mit SwingBuilder
253
8.5.1 Passwort lesen mit dem SwingBuilder
254
8.5.2 Erstellen von Swing-Widgets
256
8.5.3 Widgets anordnen
259
8.5.4 Referenzieren von Widgets
262
8.5.5 Swing-Actions
265
8.5.6 Verwendung von Modellen
267
8.5.7 Von den Teilen zum Ganzen
269
8.6 Eigene Builder erstellen
275
8.6.1 Unterklassen für BuilderSupport
276
8.6.2 Das DebugBuilder-Beispiel
278
8.7 Zusammenfassung
280
9 Das GDK
281
9.1 Objekte
282
9.1.1 Interaktive Objekte
282
9.1.2 Bequemlichkeitsmethoden von Object
288
9.1.3 Iterative Object-Methoden
290
9.2 Arbeiten mit Dateien und I/O
293
9.2.1 Durchquerung des Dateisystems
295
9.2.2 Eingabequellen lesen
296
9.2.3 Ausgaben schreiben
298
9.2.4 Filter und Konvertierungen
299
9.2.5 Serialisierte Objekt-Streams
301
9.3 Threads und Prozesse
302
9.3.1 Groovy-Multithreading
302
9.3.2 Integrieren externer Prozesse
304
9.4 Die Arbeit mit Templates
309
9.4.1 Das Format von Templates
309
9.4.2 Templates in Aktion
310
9.4.3 Templates für Fortgeschrittene
312
9.5 Groovlets
313
9.5.1 „Hello World“
313
9.5.2 Die Groovlet-Bindung
315
9.5.3 Templates und Groovlets
318
9.6 Zusammenfassung
320
10 Datenbankprogrammierung mit Groovy
323
10.1 Grundlegende Datenbankoperationen
324
10.1.1 Datenbankzugriff einrichten
325
10.1.2 SQL ausführen
328
10.1.3 Daten abfragen
333
10.1.4 Von den Teilen zum Ganzen
336
10.2 DataSets für SQL ohne SQL
338
10.2.1 DataSet-Operationen verwenden
339
10.2.2 DataSets auf Datenbank-Views
342
10.3 Organisieren der Datenbankarbeit
344
10.3.1 Überblick über die Architektur
344
10.3.2 Verhalten der Anwendung spezifizieren
346
10.3.3 Implementierung der Infrastruktur
347
10.3.4 Ein transparentes Domain-Modell
351
10.3.5 Implementierung der Anwendungsschicht
352
10.4 Groovy und ORM
353
10.5 Zusammenfassung
354
11 Groovy-Integration
357
11.1 Vorbereitung auf die Integration
358
11.1.1 Richtig integrieren
358
11.1.2 Abhängigkeiten einrichten
360
11.2 Ausdrücke und Skripte auswerten mit GroovyShell
361
11.2.1 Aller Anfang ist leicht
361
11.2.2 Übergabe von Parametern in einer Bindung
363
11.2.3 Dynamische Klassen zur Laufzeit generieren
365
11.2.4 Skripte parsen
365
11.2.5 Skripte oder Klassen ausführen
366
11.2.6 Weitere Parametrisierung von GroovyShell
367
11.3 Die Groovy-Skript-Engine
371
11.3.1 Einrichten der Engine
371
11.3.2 Skripte ausführen
371
11.3.3 Abweichenden Ressourcenkonnektor definieren
372
11.4 Der GroovyClassLoader
373
11.4.1 Groovy-Klassen parsen und laden
373
11.4.2 Was war zuerst da: Die Henne oder das Ei?
375
11.4.3 Ein benutzerdefinierter Resource-Loader
378
11.4.4 Sicherheit in der Sandbox
379
11.5 Spring-Integration
382
11.5.1 GroovyBeans mit Spring verdrahten
383
11.5.2 Aktualisierbare Beans
385
11.5.3 Inline-Skripte
385
11.6 Mustang und JSR-223
386
11.6.1 Einführung in JSR-223
386
11.6.2 Der Skript-Engine-Manager und seine Skript-Engines
387
11.6.3 Kompilierbare und aufrufbare Skript-Engines
388
11.7 Die Wahl des richtigen Integrationsmechanismus
391
11.8 Zusammenfassung
392
12 Arbeiten mit XML
393
12.1 XML-Dokumente lesen
394
12.1.1 Arbeiten mit einem DOM-Parser
395
12.1.2 Daten lesen mit dem Groovy-Parser
399
12.1.3 Lesen mit einem SAX-Parser
404
12.1.4 Lesen mit einem StAX-Parser
405
12.2 XML verarbeiten
407
12.2.1 Vor Ort-Verarbeitung
408
12.2.2 Streaming-Verarbeitung
410
12.2.3 Kombination mit XPath
415
12.3 Verteilte Verarbeitung mit XML
422
12.3.1 Überblick über Webdienste
422
12.3.2 RSS und ATOM lesen
423
12.3.3 Ein REST-basiertes API
425
12.3.4 XML-RPC
428
12.3.5 Anwendung von SOAP
430
12.4 Zusammenfassung
435
Teil 3 Groovy für jeden Tag
437
13 Tipps und Tricks
439
13.1 Was Sie sich merken sollten
440
13.1.1 Gleichheit versus Identität
440
13.1.2 Klammern richtig setzen
440
13.1.3 Rückkehr aus Methoden und Closures
441
13.1.4 Methoden aufrufen im Builder-Code
442
13.1.5 Qualifizierter Zugriff auf „this“
444
13.1.6 Numerische Typen
445
13.1.7 Ant
446
13.1.8 Skripte sind Klassen, nur anders
448
13.2 Nützliche Codefragmente
451
13.2.1 Eine Collection mischen
451
13.2.2 Text durcheinanderwürfeln mit regulären Ausdrücken
452
13.2.3 Fortschrittsanzeige auf der Konsole
452
13.2.4 Selbstkommentierende Einzelschritte
453
13.2.5 GString für Fortgeschrittene
454
13.3 Groovy auf der Kommandozeile
455
13.3.1 Kommandozeilenskripte auswerten
456
13.3.2 Die Optionen print und line
457
13.3.3 Der Lauschmodus
458
13.3.4 Vor-Ort-Bearbeitung auf der Kommandozeile
459
13.4 Automatisierungsskripte
459
13.4.1 Konsistente Unterstützung für Kommandozeilenoptionen
460
13.4.2 Klassenpfad mit RootLoader erweitern
463
13.4.3 Ausführungsfahrplan für Skripte
465
13.5 Beispiele für die Automatisierung von Tasks
467
13.5.1 Scraping von HTML-Seiten
467
13.5.2 Automatisieren von Webaktionen
469
13.5.3 Versionskontrolle inspizieren
471
13.5.4 Pragmatische Codeanalyse
472
13.5.5 Weitere interessante Punkte
473
13.6 Layout des Arbeitsbereichs
474
13.6.1 IDE-Setup
475
13.6.2 Debugging
476
13.6.3 Profiling
480
13.6.4 Refactoring
481
13.7 Zusammenfassung
482
14 Unit Testing mit Groovy
483
14.1 Erste Schritte
484
14.1.1 Tests schreiben ist einfach
484
14.1.2 GroovyTestCase: Eine Einführung
485
14.1.3 GroovyTestCase
486
14.2 Unit Testing für Groovy-Code
487
14.3 Unit Testing für Java-Code
491
14.4 Tests organisieren
494
14.5 Fortgeschrittene Testmethoden
495
14.5.1 Testen wird groovy
496
14.5.2 Stubs und Mocks
497
14.5.3 GroovyLogTestCase
502
14.6 IDE-Integration
504
14.6.1 Verwenden von GroovyTestSuite
504
14.6.2 Verwenden von AllTestSuite
506
14.6.3 Fortgeschrittene IDE-Integration
507
14.7 Tools für Groovy-Testing
509
14.7.1 Code-Abdeckung mit Groovy
509
14.7.2 JUnit-Erweiterungen
512
14.8 Build-Automatisierung
515
14.8.1 Build-Integration mit Ant
515
14.8.2 Build-Integration mit Maven
516
14.9 Zusammenfassung
519
15 Windows wird Groovy
521
15.1 Scriptom herunterladen und installieren
522
15.2 Scriptom intern
523
15.2.1 Jacob
523
15.2.2 Instanzieren einer ActiveX-Komponente
525
15.2.3 Methoden aufrufen
527
15.2.4 Zugriff auf Properties und Rückgabewerte
529
15.2.5 Event-Unterstützung
529
15.3 Praxis-Szenario: Automatisieren der Lokalisierung
532
15.3.1 Entwurf des Dokumentformats
533
15.3.2 Entwurf des Thesaurus
533
15.3.3 Erstellen eines Word-Dokuments
535
15.3.4 Erstellung des endgültigen Dokuments
537
15.4 Automatisierung weiterer Anwendungen
539
15.4.1 Zugriff auf die Windows-Registrierung
539
15.4.2 Ein eigenes Automatisierungssystem programmieren
540
15.5 Verfügbare Dokumentation
542
15.6 Zusammenfassung
543
16 Ich sehe das Licht: Grails
545
16.1 Die Ausgangssituation
545
16.1.1 Grails installieren
546
16.1.2 Die ersten Schritte
547
16.2 Erstellen des Domain-Modells
549
16.2.1 Die Use Cases
550
16.2.2 Beziehungen designen
550
16.3 Implementierung des Domain-Modells
551
16.3.1 Scaffolding der Domain-Klassen
552
16.3.2 Scaffolding der Views und Controller
553
16.3.3 Testen der Webanwendung
554
16.3.4 Vervollständigen des Domain-Modells
555
16.4 Anpassen der Views
557
16.4.1 Bootstrapping von Daten
557
16.4.2 Arbeiten mit Groovy Server Pages
558
16.4.3 Arbeiten mit Tag-Bibliotheken
561
16.5 Arbeiten mit Controllern und Finder-Methoden
563
16.6 Ausarbeitung des Modells
566
16.7 Arbeiten mit der Session
567
16.8 Das Finish
571
16.8.1 Constraints validieren
571
16.8.2 Die Anwendung herausgeben
572
16.8.3 Abschied
574
A Installation und Dokumentation
577
A.1 Installation
577
A.2 Aktuelle Dokumentation beschaffen
578
A.2.1 Online-Ressourcen
578
A.2.2 Abonnieren von Mailinglisten
579
A.2.3 Verbindung mit dem Forum und Chat
579
B Infos zur Programmiersprache Groovy
581
B.1 Schlüsselwörter
582
C GDK-API-Kurzreferenz
583
C.1 Arrays und Primitives
583
C.2 Das Package java.lang
584
C.3 Das Package java.math
588
C.4 Die Packages java.util und java.sql
589
C.5 Das Package java.util.regex
591
C.6 Das Package java.io
592
C.7 Das Package java.net
595
D Spickzettel
597
D.1 Listen
597
D.2 Closures
598
D.3 Reguläre Ausdrücke
598
D.4 Unit Testing
600
D.5 Mocks und Stubs
600
D.6 XML-GPath-Notation
601
Register
603
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.