| ... | @@ -4,13 +4,13 @@ Servlet container - aplikace která se stará o servlety. Referenční implement |
... | @@ -4,13 +4,13 @@ Servlet container - aplikace která se stará o servlety. Referenční implement |
|
|
|
|
|
|
|
Servlet generuje odpověď metodami doGet(), doPost()... Přijímá HTTPServletRequest.
|
|
Servlet generuje odpověď metodami doGet(), doPost()... Přijímá HTTPServletRequest.
|
|
|
|
|
|
|
|
##Spring Framework
|
|
## Spring Framework
|
|
|
|
|
|
|
|
Servlety jsou úplné dno - jsou součástí servlet API. Nad Servlety pracují frameworky. Existuje jeden nejpoužívanější framework. Přechod na jiný ale nebývá složitý. Velmi rozsáhlý, je až nemožné ho umět celý. Proto nad ním začali budovat SpringBoot, který Spring zjednodušuje pro lepší použitelnost, přináší základní konfiguraci, kterou lze měnit. Zároveň se hodí do konceptu microservice - každý service dělá malou část. Lepší modulovatelnost, komunikace a škálovatelnost. Komunikace probíhá přes REST - ideální. Spring je alternativou k Enterprise Java bean - jsou hezké ale nechceme je, vytváří velké monolitické aplikace škálovatelné přes spoustu strojů - celou aplikaci nahrajeme do aplikačního kontejneru - řeší zabezpečení, sdílení práv, přístup k DB a zároveň je lze rozprostřít mezi více serverů.
|
|
Servlety jsou úplné dno - jsou součástí servlet API. Nad Servlety pracují frameworky. Existuje jeden nejpoužívanější framework. Přechod na jiný ale nebývá složitý. Velmi rozsáhlý, je až nemožné ho umět celý. Proto nad ním začali budovat SpringBoot, který Spring zjednodušuje pro lepší použitelnost, přináší základní konfiguraci, kterou lze měnit. Zároveň se hodí do konceptu microservice - každý service dělá malou část. Lepší modulovatelnost, komunikace a škálovatelnost. Komunikace probíhá přes REST - ideální. Spring je alternativou k Enterprise Java bean - jsou hezké ale nechceme je, vytváří velké monolitické aplikace škálovatelné přes spoustu strojů - celou aplikaci nahrajeme do aplikačního kontejneru - řeší zabezpečení, sdílení práv, přístup k DB a zároveň je lze rozprostřít mezi více serverů.
|
|
|
|
|
|
|
|
Spring je silně modulární. Původně ale vůbec nevznikl jako konkurence EJB. Jádrem Springu je tzv. **Inversion of Control** a **Dependence Injection** - do třídy je vložena jiná třída (autu vyměnil technik motor - musím objekty vytvořit v paměti - zabrat místo a vytvořit propoje mezi nimi - setRidic; jedDoServisu - zaplacení jsme za poslední řádek), obslužný kód je nejhorší ale dal by se zautomatizovat. Springu řeknu mám auto a to bude mít řidiče a potřebuje ho. → Řeknu: "dej mi auto" a dostanu ho i s řidičem.
|
|
Spring je silně modulární. Původně ale vůbec nevznikl jako konkurence EJB. Jádrem Springu je tzv. **Inversion of Control** a **Dependence Injection** - do třídy je vložena jiná třída (autu vyměnil technik motor - musím objekty vytvořit v paměti - zabrat místo a vytvořit propoje mezi nimi - setRidic; jedDoServisu - zaplacení jsme za poslední řádek), obslužný kód je nejhorší ale dal by se zautomatizovat. Springu řeknu mám auto a to bude mít řidiče a potřebuje ho. → Řeknu: "dej mi auto" a dostanu ho i s řidičem.
|
|
|
|
|
|
|
|
##Demo Dependence Injection
|
|
## Demo Dependence Injection
|
|
|
|
|
|
|
|
Mechanismus který za nás vytváří - Inversion of Control a řeší vazby - Dependence Injection. Main - SpringApplicationRun - připraví kontext. Pokud chceme něco provést potom, vytvoříme Bean. Hele vytvoř mi instanci SpringApplication, CommandLineRunner s tímto kódem.
|
|
Mechanismus který za nás vytváří - Inversion of Control a řeší vazby - Dependence Injection. Main - SpringApplicationRun - připraví kontext. Pokud chceme něco provést potom, vytvoříme Bean. Hele vytvoř mi instanci SpringApplication, CommandLineRunner s tímto kódem.
|
|
|
|
|
|
| ... | @@ -50,13 +50,13 @@ Vyrobili jsme třídy Ridic a Auto ale Spring o nich nic neví, potřebujeme Str |
... | @@ -50,13 +50,13 @@ Vyrobili jsme třídy Ridic a Auto ale Spring o nich nic neví, potřebujeme Str |
|
|
|
|
|
|
|
**3. Setter inject** - vytvoříme si setter, ten nahrajeme a vše nasettuje. Objekt je ale schopný fungovat až po nahrání všech setterů. Protahuje kód a čas - nejméně používaný.
|
|
**3. Setter inject** - vytvoříme si setter, ten nahrajeme a vše nasettuje. Objekt je ale schopný fungovat až po nahrání všech setterů. Protahuje kód a čas - nejméně používaný.
|
|
|
|
|
|
|
|
###Pojmy
|
|
### Pojmy
|
|
|
|
|
|
|
|
* **Bean** - je v kontextu a poskytuje určitou funkčnost, my je nevytváříme, vytváří je za nás aplikační kontejner - kontext. Existují 2 typy: a) singleton - 1 instance; b) prototype - každý má vlastní
|
|
* **Bean** - je v kontextu a poskytuje určitou funkčnost, my je nevytváříme, vytváří je za nás aplikační kontejner - kontext. Existují 2 typy: a) singleton - 1 instance; b) prototype - každý má vlastní
|
|
|
|
|
|
|
|
* **Aplikační kontext** - uchovává beany
|
|
* **Aplikační kontext** - uchovává beany
|
|
|
|
|
|
|
|
##Konfigurace aplikačního kontextu
|
|
## Konfigurace aplikačního kontextu
|
|
|
|
|
|
|
|
Dříve pomocí XML - zastaralý způsob. Spíše anotace pomocí Javy - do kontextu dáváme různé anotace a tím říkáme, co chceme.
|
|
Dříve pomocí XML - zastaralý způsob. Spíše anotace pomocí Javy - do kontextu dáváme různé anotace a tím říkáme, co chceme.
|
|
|
|
|
|
| ... | @@ -66,10 +66,28 @@ Dříve pomocí XML - zastaralý způsob. Spíše anotace pomocí Javy - do kont |
... | @@ -66,10 +66,28 @@ Dříve pomocí XML - zastaralý způsob. Spíše anotace pomocí Javy - do kont |
|
|
4. @Autowired - zdrátování - abychom Springu řekli že tu bude nějaká vazba
|
|
4. @Autowired - zdrátování - abychom Springu řekli že tu bude nějaká vazba
|
|
|
5. @ComponentScan -@Component má tři potomky: @Controller, @Service a @Repository - tyto tři se píšou před třídu a řekneme tím: Vyrob mi jednu instanci téhle třídy jak se jmenuje tato třída ale s malým písmenem. Odpovídají třem vrstvám: Repository = perzistentní, Service - servisy, Controller - Controller/RestController. Pokud nevíme kam zařadit, označíme jako Beanu.
|
|
5. @ComponentScan -@Component má tři potomky: @Controller, @Service a @Repository - tyto tři se píšou před třídu a řekneme tím: Vyrob mi jednu instanci téhle třídy jak se jmenuje tato třída ale s malým písmenem. Odpovídají třem vrstvám: Repository = perzistentní, Service - servisy, Controller - Controller/RestController. Pokud nevíme kam zařadit, označíme jako Beanu.
|
|
|
|
|
|
|
|
###Moduly
|
|
### Moduly
|
|
|
|
|
|
|
|
Core - obecná funkcionalita
|
|
Core - obecná funkcionalita
|
|
|
Testing - testování
|
|
Testing - testování
|
|
|
WebServlet - prezentace
|
|
WebServlet - prezentace
|
|
|
WEB Reactive - Web Sockety
|
|
WEB Reactive - Web Sockety
|
|
|
Integration - Spojení Springu s něčím dalším |
|
Integration - Spojení Springu s něčím dalším
|
|
\ No newline at end of file |
|
|
|
|
|
## Perzistentní vrstva
|
|
|
|
|
|
|
|
Lze použít relační DB, non SQL, dokumentovou i grafovou.
|
|
|
|
|
|
|
|
### Relační databáze
|
|
|
|
|
|
|
|
Více přístupů (pro Javu).
|
|
|
|
|
|
|
|
Na spod mám třeba Oracle DB - chodí tam dotazy a vrací tabulky. Pokud chci pracovat na této úrovni, použiju Java Database Connection - JDBC. Napíšu SQL dotaz a ona vrátí něco co reprezentuje tabulku. JDBC je univerzální pro všechny DB.
|
|
|
|
|
|
|
|
My bychom chtěli pracovat s objekty a jejich kolekcemi. Přímo od Springu existuje JDBC Template - modul který sice dál dolů posílá SQL a přijímá tabulky ale vrací nám objekty - musíme si naimplementovat Mapper = jak převést řádek na objekt - 100% kontrola.
|
|
|
|
|
|
|
|
Nebo JPR - Java Persistent API (Hibernate je referenční implementace JPA). My mu dáme mapování (anotacemi nebo xml soubory) mezi objektem a db a on vymyslí SQL, zeptá se DB a vrátí objekty. A nad ním existuje ještě obálka ze springu a to sjou ty repozitáře - Aby se nám s Hibernate pracovalo ještě líp - o databázi vůbec nevíme.
|
|
|
|
|
|
|
|
## Repository demo
|
|
|
|
|
|
|
|
Přidáme si vrstvu data a nějakou databázi. Nepotřebujeme mít nainstalovanou databázi. Buď si ji nainstalujeme nebo ji máme embedded. Nový projekt - DevTools, JPA, H2. Otevřeme build.gradle. |