Commit 64291d6b by Patryk Czarnik

@Autowired po raz pierwszy

parent 7f38e98c
package com.example.demo;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HistoriaJSON {
@Autowired
private LogikaKalkulatora logikaKalkulatora;
@GetMapping("/historia.json")
@ResponseBody
public List<String> dajHistorie() {
return logikaKalkulatora.getHistoriaDzialan();
}
}
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;
......@@ -9,7 +10,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/kalkulator")
public class Kalkulator {
private LogikaKalkulatora logikaKalkulatora = new LogikaKalkulatora();
@Autowired
private LogikaKalkulatora logikaKalkulatora;
@GetMapping
public String kalkulatorGet() {
......@@ -20,7 +22,7 @@ public class Kalkulator {
// do tej metody - wystarczy zadeklarować parametry o tej samej nazwie.
@PostMapping
public String kalkulatorPost(Model model, Long liczba1, Long liczba2, String operacja) {
long wynik = logikaKalkulatora.oblicz(operacja, liczba1, liczba2);
long wynik = getLogikaKalkulatora().oblicz(operacja, liczba1, liczba2);
model.addAttribute("wynik", wynik);
return "kalkulator.html";
}
......@@ -28,9 +30,12 @@ public class Kalkulator {
// Ta metoda zadziała, gdy ktoś wejdzie pod adres /kalkulator/historia
@GetMapping("/historia")
public String pokazHistorie(Model model) {
model.addAttribute("historia", logikaKalkulatora.getHistoriaDzialan());
model.addAttribute("historia", getLogikaKalkulatora().getHistoriaDzialan());
return "historia.html";
}
public LogikaKalkulatora getLogikaKalkulatora() {
return logikaKalkulatora;
}
}
......@@ -4,6 +4,19 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.stereotype.Component;
/* Wstrzykiwaie zależności (dependency injection):
* - gdy przed klasą napiszemy adnotację @Component (albo: @Service, @Repository, @Controller, ...)
* to na starcie aplikacji Spring utworzy jeden obiekt tej klasy ("singleton") i będzie go pamiętać
* (ten obiekt będzie "beanem")
* - są też inne sposoby tworzenie beanów (konfiguracja w pliku beans.xml, adnotacje @Bean przy metodzie fabrycznej, ...)
*
* - gdy w innej klasie przy polu danego typu uzyjemy adnotacji @Autowired, to Spring wpisze tam referencję do znaego sobie obiektu danej klasy
* - są też inne sposoby wstrzykiwania: poprzez setter i poprzez konstruktor.
*/
@Component
public class LogikaKalkulatora {
// Ponieważ ten sam obiekt listy będzie używany w różnych zapytaniach, to może być używany przez różne wątki.
// dlatego tworzymy listę "synchronizowaną", żeby np. równoległe operacje add sobie nie przeszkadzały.
......
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