Ciele
- Naučiť sa implementovať anotačný procesor.
- Naučiť sa používať mirrors API pre spracovanie anotácií.
- Naučiť sa generovať zdrojový kód počas kompilácie.
Postup
Krok 1: Príprava
Úloha 1.1
Vytvorte podprojekt processor
podľa špecifikácie zadania 2.
Poznámka
Nezabudnite pridať závislosť na projekt processor
do example
:
dependencies {
annotationProcessor(project(":processor"))
...
Krok 2: Implementácia anotačného procesora
Úloha 2.1
Implementujte anotačný procesor, ktorý bude generovať SQL príkazy pre vytvorenie tabuliek pre všetky triedy označené anotáciou @Table
.
Anotačný procesor musí implementovať rozhranie AbstractProcessor
a byť označený anotáciou @SupportedAnnotationTypes("sk.tuke.meta.persistence.annotations.Table")
. Plne kvalifikovaný názov triedy anotačného procesora musí byť uvedený v súbore META-INF/services/javax.annotation.processing.Processor
v resources
podprojektu processor
.
Úloha 2.2
Implementujte v anotačnom procesore generovanie súboru s SQL príkazmi pre vytvorenie tabuliek pre každú triedu označenú anotáciou @Table
. Generované súbory nech sú ukladané do adresára persistence
v adresári s *.class
súbormi spracovávaného projektu (napríklad example
).
Správne vytvorenie súborov zabezpečíte pomocou metódy Filer.createResource(StandardLocation.CLASS_OUTPUT, ...)
.
Úloha 2.3
Implementujte generovanie Java triedy s zoznamom tried označených anotáciou @Table
.
Vďaka tejto triede budete môcť načítať všetky SQL súbory pri volaní createTables()
bez argumentov.
Krok 3: Načítanie SQL príkazov
Úloha 3.1
Upravte triedu ReflectivePersistenceManager
tak, aby načítala SQL príkazy z generovaných súborov a vykonala v metóde createTables()
.
Pre načítavanie súborov z CLASSPATH môžete použiť metódu ClassLoader.getResourceAsStream()
.