JavaWeb application

Spring Boot część 4 – Mechanizm wstrzykiwania zależności

Mechanizm wstrzykiwania zależności jest znany nie tylko w Spring. Zasadniczo są trzy rodzaje wstrzykiwania zależności. Spring pozwala na wykorzystywanie ich wszystkich. Dopuszczalne jest ich stosowanie przemienne. Mimo, że jest to możliwe, to dobre praktyki nie popierają takiemu działaniu. Możliwe jest wstrzykiwanie zależności poprzez:

  • Konstruktor
  • Pole
  • Właściwość

Poniższa klasa jest przykładową, która będzie następnie wstrzykiwana do klasy powiązanej.

@Component
public class ShoppingCard {

    private List<Product> productList;

    public ShoppingCard() {
        this.productList = new ArrayList<>();
    }

    public void addProductToShoppingCard(Product product)
    {
        productList.add(product);
    }
}

Wstrzykiwanie poprzez konstruktor

Wstrzykiwanie przez konstruktor jest najbardziej rekomendowanym sposobem wstrzykiwania zależności. Odbywa się to poprzez napisaniem adnotacji @Autowired nad konstruktorem, oraz podaniem w parametrze wejściowym klasę która przeznaczona jest do wstrzyknięcia. Całość przedstawia kod poniżej.

@Component
public class Shop {

    private ShoppingCard shoppingCard;

    @Autowired
    public Shop(ShoppingCard shoppingCard) {
        this.shoppingCard = shoppingCard;
    }

    public void purchase() {
        shoppingCard.addProductToShoppingCard(new Product(1, "Milk"));
        shoppingCard.addProductToShoppingCard(new Product(2, "Tea"));
        shoppingCard.addProductToShoppingCard(new Product(3, "Bread"));
    }
}

Wstrzykiwanie poprzez pole

Jest to najłatwiejszy sposób wstrzykiwania zależności. Był on wykorzystywany w ramach tego kursu wielokrotnie. Do jego wykorzystania wystarczy nad polem umieścić adnotacje @Autowired. Sposób jest najszybszy i najprostszy do wykorzystania.

@Component
public class Shop {
    
    @Autowired
    private ShoppingCard shoppingCard;

    public void purchase() {
        shoppingCard.addProductToShoppingCard(new Product(1, "Milk"));
        shoppingCard.addProductToShoppingCard(new Product(2, "Tea"));
        shoppingCard.addProductToShoppingCard(new Product(3, "Bread"));
    }
}

Wstrzykiwanie poprzez właściwość

Sposób ten polega na utworzeniu właściwości lub żargonowego setera ustawiającego wartość pola, które przeznaczone jest do wstrzyknięcia. Nad nim musi znajdować się adnotacja @Autowired.

@Component
public class Shop {
    
    private ShoppingCard shoppingCard;

    @Autowired
    public void setShoppingCard(ShoppingCard shoppingCard) {
        this.shoppingCard = shoppingCard;
    }
    
    public void purchase() {
        shoppingCard.addProductToShoppingCard(new Product(1, "Milk"));
        shoppingCard.addProductToShoppingCard(new Product(2, "Tea"));
        shoppingCard.addProductToShoppingCard(new Product(3, "Bread"));
    }
}

Niezależnie od sposobu wstrzykiwania zależności warto wybrać jedną i kurczowo się nią trzymać w całym projekcie dla utrzymania spójności kodu.

W kolejnym kursie zostanie opisany schemat komunikacji w oparciu o architekturę REST.

Cały kurs opisujący mechanikę i działanie Spring Boot od podstaw znajdziesz tutaj: Kurs Spring Boot

Tags:
Show Buttons
Hide Buttons