| ... | ... | @@ -37,4 +37,15 @@ Bean před metodou říkáme kontextu, že chceme vytvořit instanci toho objekt |
|
|
|
1. vytvořil se kontext a v něm hromada beanů a instancí
|
|
|
|
2. Provolala se metoda jedné konkrétní instance command line runneru
|
|
|
|
|
|
|
|
Vyrobili jsme třídy Ridic a Auto ale Spring o nich nic neví, potřebujeme Stringu chceme říct, že je chceme vytvořit - anotace @Component - budu tam mít komponentu auta, vyrob mi jednu instanci. V záložce Spring v idei je to vidět. Budu je chtít vypsat na cmdline. Potřebuji říct, když vytváříš tenhle objekt, tak mi dej jejich instanci - parametrem. Jen jsem řekl že ho chci, nic jsem nevytvořil. Dostaneme Auto s ridicem null a řidiče beze jména. Teď to chceme nastavit - auto má řidiče - u property @Autowired - když vytváříš auto tak se postarej aby mělo řidiče. Teď už má řidiče, jen má řidič jméno null. Chci 2 řidiče s různým jménem. V okamžiku kdy je v konstruktoru parametr je string nahranej... kde ho vzít? Nemůžu mít u třídy komponentu a budu muset Beany řidiče vyrobit. Bez ní by to házelo unsatisfied dependency. Vyrobil jsem si Pepu a systém poznal že tam chci Pepu. |
|
|
\ No newline at end of file |
|
|
|
Vyrobili jsme třídy Ridic a Auto ale Spring o nich nic neví, potřebujeme Stringu chceme říct, že je chceme vytvořit - anotace @Component - budu tam mít komponentu auta, vyrob mi jednu instanci. V záložce Spring v idei je to vidět. Budu je chtít vypsat na cmdline. Potřebuji říct, když vytváříš tenhle objekt, tak mi dej jejich instanci - parametrem. Jen jsem řekl že ho chci, nic jsem nevytvořil. Dostaneme Auto s ridicem null a řidiče beze jména. Teď to chceme nastavit - auto má řidiče - u property @Autowired - když vytváříš auto tak se postarej aby mělo řidiče. Teď už má řidiče, jen má řidič jméno null. Chci 2 řidiče s různým jménem. V okamžiku kdy je v konstruktoru parametr je string nahranej... kde ho vzít? Nemůžu mít u třídy komponentu a budu muset Beany řidiče vyrobit. Bez ní by to házelo unsatisfied dependency. Vyrobil jsem si Pepu a systém poznal že tam chci Pepu.
|
|
|
|
|
|
|
|
## Dependency injection
|
|
|
|
|
|
|
|
Řeší vazby mezi komponentami.
|
|
|
|
|
|
|
|
**Možnosti:**
|
|
|
|
**1. Property injection **- v kódu napíšu @Autowired ...property. Nejdřív Spring vybere komponenty daného typu. Když je jedna, je to jasné. Pokud je jich víc, rozhodne se dle jména. Nevýhoda - porušujeme princip zapouzdření - někdo naši beanu musí rozlousknout a nasetovat property. Od Javy 11 chce Oracle tuto vlastnost rozloussknutí odstranit. Ale stačí jeden řádek kódu a pro zbytek kódu zachováváme zapouzdření. Má na ostatní kód nejmenší efekt. Použili jsme u Auta a jeho řidiče.
|
|
|
|
|
|
|
|
**2. Constructor injection** - máme property a vytvoříme konstruktor který vše nasetuje. Nevyřeší ale cyklickou vazbu. Na auto potřebujeme řidiče a na auto firmu a na firmu auto. Dalo by se řešit tak že CarDao by bylo Interface - dostali bychom obálku do které se nasetuje obsah. Framework ale takhle musí generovat třída za běhu. Nepřímo jsme použili s Pepou a Runnerem.
|
|
|
|
|
|
|
|
**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ý. |
|
|
\ No newline at end of file |