| ... | ... | @@ -11,3 +11,30 @@ Servlety jsou úplné dno - jsou součástí servlet API. Nad Servlety pracují |
|
|
|
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
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
`
|
|
|
|
@SpringBootApplication
|
|
|
|
public class DemodiApplication {
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
SpringApplication.run(DemodiApplication.class, args);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Bean
|
|
|
|
public CommandLineRunner runner(){
|
|
|
|
return new CommandLineRunner() {
|
|
|
|
@Override
|
|
|
|
public void run(String... args) throws Exception {
|
|
|
|
System.out.println("Hello world");
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`
|
|
|
|
Bean před metodou říkáme kontextu, že chceme vytvořit instanci toho objektu tou metodou. Normálně potřebujeme typ a jméno. Tady:
|
|
|
|
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 |