Commit c8e66e4c by Patryk Czarnik

Waluty, depenedency injection: @Component i @Autowired

parent ae8c0b00
...@@ -14,11 +14,18 @@ import javax.xml.xpath.XPathConstants; ...@@ -14,11 +14,18 @@ import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory; import javax.xml.xpath.XPathFactory;
import org.springframework.stereotype.Component;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Node; import org.w3c.dom.Node;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
/* Adnotacje @Component, @Service, @Repository, a także @Controller i @RestController
* powodują, że:
* 1) podczas startu aplikacji Spring tworzy obiekt tej klasy (pojedynczą sztukę, czyli "singleton")
* 2) ten obiekt będzie dostępny dla innych jako "komponent" ("bean") i będzie go wstrzykiwać
*/
@Component
public class PobieranieXML { public class PobieranieXML {
public TabelaWalut pobierzTabele(String data) { public TabelaWalut pobierzTabele(String data) {
......
package com.example.demo.waluty; package com.example.demo.waluty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@Controller @Controller
public class WalutyController { public class WalutyController {
private PobieranieXML pobieracz = new PobieranieXML(); /* @Autowired oznacza, że Spring wstawi do tej zmiennej referencję do obiektu tego typu.
* Gdyby nie potrafił tego zrobić, to aplikacja się nie uruchomi. Pole nie zostanie pozostawione z nullem.
*
* To się nazywa "wstrzykiwanie zależności" / dependency injection.
* Są 3 sposoby wstrzykiwania , o 2 pozostałych później.
* Wstrzykiwanie zal. działa tylko gdy obiekt tej klasy jest inicjalizowany przez Springa.
*
* Wstrzykiwać można obiekty, które są typu:
* - komponent (bean) istniejący w tej samej aplikacji (tak jest tutaj)
* - klasa o specjalnym znaczeniu, którą Spring "zna", np. ServletContext
*/
@Autowired
private PobieranieXML pobieracz;
@GetMapping("/waluty") @GetMapping("/waluty")
public String wyswietlWaluty(String data, Model model) { public String wyswietlWaluty(String data, Model model) {
......
package com.example.demo.waluty; package com.example.demo.waluty;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -8,7 +9,8 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -8,7 +9,8 @@ import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequestMapping("/waluty.rest") @RequestMapping("/waluty.rest")
public class WalutyRest { public class WalutyRest {
private PobieranieXML pobieracz = new PobieranieXML(); @Autowired
private PobieranieXML pobieracz;
@GetMapping @GetMapping
public TabelaWalut wyswietlWaluty() { public TabelaWalut wyswietlWaluty() {
......
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