რომელი დამოკიდებულების ინექციის ტიპებს იცნობთ?
sobes.tech AI
პასუხი AI-სგან
მნიშვნელოვანია სამი ძირითადი ტიპი:
-
მოყვანა ველის საშუალებით (Field Injection): დამოკიდებულება პირდაპირ ინიექცირდება კლასის ველზე ანოტაციის გამოყენებით (მაგალითად,
@AutowiredSpring-ში). მარტივია გამოყენება, მაგრამ ართულებს მოდულურ ტესტირებას და არღვევს ერთგულების პრინციპს, მალავს დამოკიდებულებებს.// მაგალითი ველის საშუალებით ინექციის public class MyService { // დამოკიდებულება პირდაპირ ინიექცირდება ველზე @Autowired private MyRepository repository; public void doSomething() { repository.getData(); } } -
მოყვანა სეტერის საშუალებით (Setter Injection): დამოკიდებულება ინიექცირდება საჯარო სეტერის მეშვეობით. შესაძლებელია იყოს არჩევითი (არ არის აუცილებელი), მოსახერხებელია დამოკიდებულებების შეცვლისთვის შესრულების დროს (თუმცა იშვიათად გამოიყენება). არ ქმნის აუცილებელ დამოკიდებულებას ობიექტის შექმნისას.
// მაგალითი სეტერის საშუალებით ინექციის public class MyService { private MyRepository repository; // დამოკიდებულება ინიექცირდება სეტერის მეშვეობით @Autowired public void setRepository(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } } -
მოყვანა კონსტრუქტორის საშუალებით (Constructor Injection): დამოკიდებულება ინიექცირდება კონსტრუქტორის არგუმენტის მეშვეობით. ეს არის სასურველი, რადგან უზრუნველყოფს აუცილებელ დამოკიდებულებას (без него ობიექტი ვერ შეიქმნება), ადვილად ტესტირებას (მოკი ობიექტების გადაცემა მარტივია) და ნათლად გამოხატავს კლასის საჭიროებებს. ქმნის ობიექტებს უცვლელებს შექმნის შემდეგ, თუ ველები
final-ია.// მაგალითი კონსტრუქტორის საშუალებით ინექციის public class MyService { private final MyRepository repository; // ველი შეიძლება იყოს `final` // დამოკიდებულება ინიექცირდება კონსტრუქტორის მეშვეობით @Autowired // ახალი ვერსიებში Spring-ის შეიძლება გამოტოვოს @Autowired ანოტაცია public MyService(MyRepository repository) { this.repository = repository; } public void doSomething() { repository.getData(); } }
შედარებითი სია:
| ტიპი | აუცილებლობა | გამოყენების სიმარტივე | ტესტირებადობა | უცვლელობა |
|---|---|---|---|---|
| ველის საშუალებით | არჩევითი | მაღალი | დაბალი | არა |
| სეტერის საშუალებით | არჩევითი | საშუალო | საშუალო | არა |
| კონსტრუქტორის საშუალებით | აუცილებელი | საშუალო | მაღალი | შესაძლებელია |
მთავარი რეკომენდაციაა, გამოიყენოთ კონსტრუქტორის საშუალებით ინექცია.