Ich nehme derzeit an einer Akademie zum Java Fullstack Software Engineer teil. In den kommenden Wochen möchte ich hier meine Mitschrift, so gut es geht, aufzeichnen und mitteilen. Hier ist das, was ich vom ersten Tag in Block 5 gelernt und behalten habe:
Mocks Ergänzung
Mocks werden gut erklärt in dem Dokument: 33082-test-driven-development-mit-java.pdf
So kann man testen. Der letzte Test läuft in einen Fehler, weil ich ja nicht wirklich addiere, sondern im 4. Mockito-Fall einen anderen Fall beschreibe, als ich im Test prüfe:

Mit mockito.verify kann man schauen, ob ein bestimmter Test stattgefunden hat:

Spring

Mit Java 1.4 wurde Java in die Standard Edition und in Java Enterprise Edition (in Bezug auf Server Programmierung).
Sun hat seine eigen Welt gebaut, während außerhalb auch eigene Welten entstanden. Spring ist ein Konsortium, dass die Welten außerhalb von Sun zusammengeführt hat. Spring war das Konkurenzprodukt zu JavaEE.

Das ist wie viele Schinkenstücke, die zusammengeführt werden:

Spring ist ein Framework, dass aus vielen Einzelmodulen besteht
AOP: Aspect Orientierte Programmierung

Java bietet selber SQL-Datenbanken:

https://programmingsharing.com/configuration-embedded-h2-database-in-spring-boot-application-f760ac74ce92
Java Treiber:

Der Treiber wird in der pom.xml-Datei geholt und zur Laufzeit geladen:

Der Classloader lädt die Properties Dateien, zerlegt sie in Strings und benutzt sie dann um die Treiber zu laden und die Daten zu importieren:

Ergebnis:

So sieht es mit dem Debugger aus:


Context: In welcher Umgebung befindet sich das Programm (Server, lokales Java,…)
Links mit Spring, rechts ohne Spring:

Die Config-Datei bei Spring ist spring.xml
Die einzelnen Elemente dort heißen "Beans". Sie werden vom Spring-Framework intern in Objekte umgewandelt:

Um Spring zu benutzen, erweitere ich die Dependencies in der pom.xml:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.3</version> </dependency>
Ausserdem, braucht man die /resources/spring.xml-Datei.
Dort sind, wie gesagt, die Beans beschrieben. Sie beinhalten :
- - resources/spring.xml (context) (Kapitel 3 von 33045_spring-einfuehrung.pdf)
- - Beans
- Bean
- PackageName.KLasse
- Argumente Constructor
- Bean
Oder man benutzt Annotations (Kapitel 4 von 33045_spring-einfuehrung.pdf)
Oder man verwendet Konfigurationsklassen @Configuration (Kapitel 5 von 33045_spring-einfuehrung.pdf)
Erzeugung von Singleton-Objekten der aus der spring.xml-Datei vorgegebenen Konfiguration.
"Das Thema Endoskopie will ich nicht zu tief mit euch machen."
DIC: Dependency Incection Container
IOC: Inversion of Control
Beispiel:
Das Interface MathService delegiert die Anfrage weiter an Sumservice oder DiffService. (Kreise = Interface, graue Kästen = echte Klassen)


Über den Konstruktor werden die beiden Sub-Objekte miteinander verknüpft (verheiratet):

Man kann die App via ID ("sumService1" oder "sumserice2") oder via Service (SumService.class) aufrufen:

Properties sind Setter und Getter Methoden, die sauber nach NamensKonvention benannt wurden. In diesem Beispiel "setSumService" und nicht z.B.: "setsumservice":

Quelle: SpringFramework
- https://docs.spring.io/spring-framework/docs
——————
Disclaimer
Alles was ich mitschrieb und verstanden habe ist ohne Gewähr.
Besten Dank an unseren sehr empfehlenswerten
Trainer: Hans-Joachim Blanke blanke@4point.de

In den nächsten Tagen und Wochen geht’s weiter, so: stay tuned!
Gruß, Achim Mertens