Sobes.tech
Middle

Je možné zavádzať závislosti nielen cez konštruktor?

sobes.tech AI

Odpoveď od AI

Áno, je to možné. Okrem injektáže závislostí cez konštruktor (Constructor-based dependency injection) existujú v Spring Framework nasledujúce hlavné spôsoby:

  1. Injektáž cez setter (Setter-based dependency injection): Závislosti sú injektované prostredníctvom verejných setter metód.

    public class MyClass {
        private Dependency dependency;
    
        public void setDependency(Dependency dependency) {
            this.dependency = dependency;
        }
    
        // ... ďalšie metódy
    }
    
  2. Injektáž cez pole (Field-based dependency injection): Závislosti sú injektované priamo do polí triedy pomocou anotácií (napríklad @Autowired). Tento spôsob je najbežnejší, ale má svoje nevýhody (napríklad, ťažkosti pri jednotkovom testovaní a skryté závislosti).

    public class MyClass {
        @Autowired
        private Dependency dependency;
    
        // ... ďalšie metódy
    }
    
  3. Injektáž cez metódy (Method-based dependency injection): Menej bežný spôsob, pri ktorom sú závislosti injektované prostredníctvom akýchkoľvek metód označených vhodnou anotáciou (@Autowired).

    public class MyClass {
        private Dependency dependency;
    
        @Autowired
        public void configure(Dependency dependency) {
            this.dependency = dependency;
        }
    
        // ... ďalšie metódy
    }
    

Voľba spôsobu závisí od konkrétnej situácie a preferencií. Konstruktorová injektáž sa zvyčajne považuje za preferovanú, pretože zabezpečuje, že objekt bude vytvorený so všetkými potrebnými závislosťami a uľahčuje testovanie. Avšak, injektáž cez polia alebo settery môže byť pohodlnejšia pre voliteľné závislosti alebo pri práci s legacy kódom.