Commit a48016ea by Patryk Czarnik

Wstrzykiwanie zależności za pomocą @Autowired

parent 86b3b065
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -11,7 +12,17 @@ import org.springframework.web.bind.annotation.RequestMapping;
// Na poziomie klasy podany jest adres, pod którym działa kontroler, a metody wewnątrz tylko określają rodzaj zapytania.
// Gdyby w którejś metodzie też był podany adres, byłoby to traktowane jako dalszy ciąg adresu, np. /kalkulator/historia
public class Kalkulator {
private LogikaKalkulatora logika = new LogikaKalkulatora();
/* Wstrzykiwanie zależności (dependency injection).
W jednym komponencie chcemy uzywać innego komponentu.
Zamiast samodzielnie tworzyć obiekty i je ze sobą wiązać (co w większych aplikacjach jest żmudne),
możemy "poprosić" o to Springa.
Do pola w tej klasie Spring automatycznie wpisze referencję do obiektu tamtej klasy.
Dowiązania z różnych miejsc aplikacji domyślnie prowadzą do jednego wspólnego obiektu (tego singletona / beana / komponentu).
Są 3 sposoby wstrzykiwania: przez pole (zmienną, tak jak tutaj), przez setter i przez konstruktor.
*/
@Autowired
private LogikaKalkulatora logika;
@GetMapping
public String kalkulatorGet() {
......
package com.example.demo;
import org.springframework.stereotype.Component;
/* LogikaKalkulatora jest przykładem "komponentu".
* Podczas startu aplikacji Spring tworzy jeden obiekt tej klasy (tzw. singleton) i zapamiętuje go jako "bean".
* W starszych wersjach Springa tego typu klasy należało zadeklarować w pliku beans.xml.
* Obecnie używa się raczej adnotacji. Takie działanie mają adnotacje: @Component, @Service, @Repository, @Controller.
*
* Inny sposób tworzenia beanów/kompomentów: klasa fabryczna z metodami oznaczonymi @Bean (będą inne przykłady).
*/
@Component
public class LogikaKalkulatora {
public long oblicz(long liczba1, long liczba2, String operacja) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment