Tavaszi csomagtartó – Mi a célja az autós vezetékes kivitelezőknek?

Alig több mint egy éve fejlesztem a Spring Boot programot, de még nem értem az Autowired konstruktor használatának előnyeit, és arra gondoltam, hogy tudna-e valaki magyarázza el ezt nekem, és mi tekinthető a legjobb gyakorlatnak.

Tegyük fel, hogy babom van az alábbiak szerint:

@Component public class MyBean { void doSomeStuff() { } } 

És van egy az adott babtól függő szolgáltatás

@Service public class MyServiceImpl implements MyService { private MyBean myBean; } 

Számomra a függőség ebbe az osztályba történő injektálásának legegyszerűbb módja az lenne, ha egyszerűen a @Autowired feliratoznánk a változót

@Service public class MyServiceImpl implements MyService { @Autowired private MyBean myBean; } 

De vannak olyan online helyek (és a csapatom más fejlesztői is), akik az ilyesfajta megközelítést támogatják:

@Service public class MyServiceImpl implements MyService { private MyBean myBean; @Autowired public MyServiceImpl(MyBean myBean) { this.myBean = myBean; } } 

Számomra az ilyen konstruktor használata egyszerűen felesleges kód. A bab automatikus beírása sokkal egyszerűbb és egyszerűbb, mint ami számomra kazánlapkódnak tűnik.

Megjegyzések

  • To me, using a constructor like that is simply redundant code. Autowiring the bean is much simpler and straightforward than what appears to me to be boilerplate code., és nem aggódik a varázslat miatt, ha egy babot beinjektálunk egy privát és szetter nélküli változóba? Nem aggódik a hatalmas technikai adósság miatt, amelyet Ön, munkatársai generálnak? Nem érdekli, hogy túlságosan sokat közvetít a tavaszi ' varázsparadigmában a jó gyakorlatok megtervezése helyett?
  • Nem aggasztja, hogy engedélyezheti-e másoknak példány létrehozását a MyServiceImpl fájlt a megfelelő függőség-injektálás nélkül?
  • Nem ' nem az, hogy én ' m nem " érintett ", ' az, hogy nem voltam ' nincs tudatában annak, hogy ez óriási technikai adósságot eredményez. Ha tudna példát adni arra, hogy miért ' ilyen rossz gyakorlat, akkor ' nagyra értékelem.
  • " Nem aggasztja, hogy túl sokat közvetít a tavaszi ' varázsparadigmában a jó tervezési gyakorlatok helyett? " Van-e olyan forrása a jó tervezési gyakorlatoknak, amelyek relevánsak ennek a beszélgetésnek? ' érdekelne ezek elolvasása.
  • Lásd itt: stackoverflow.com/questions/34580033/ …

Válasz

valódi kivitelező ugyanazon okokból, amelyek miatt nyilvános gettert és beállítót használ a privát változók nyilvánosságra hozatala helyett.

Néhány valós életpélda: a mobiltelefonok nem használhatók biztonságos, információ-érzékeny fizikai helyeken. Az ezzel a biztonságos hellyel történő kommunikációnak egy biztonságosan létrehozott, ellenőrzött és titkosított kommunikációs protokollon keresztül kell történnie, amelyet nem felügyelet nélküli és ellenőrizetlen szélhámos kommunikációs csatorna használhat.

Egy koncerten nem engedheti meg az embereknek, hogy dobja a dolgokat a kerítésen át annak, aki már a stadionban van. Minden bejövőnek vagy kijövőnek át kell mennie egy kapun.

Ha csak annyi van a kód példáján, akkor feleslegesen részletes kazántáblának tűnik. De gyakran a beállításon kívül más dolgokat is végrehajtunk a konstruktorban privát változók, például az érvényesítés. Számos programozási nyelvben ennek megváltoztatása bináris törésváltozás, így a konstruktor elölről történő biztosítása ésszerű lépés lehet.

Végül az osztálynak képesnek kell lennie a függőségi injektálástól függetlenül működni. Ha annotációt tesz egy privát tagra, de nem tartalmaz konstruktort , lényegében szorosan kötötte az osztályt a DI tárolóhoz, és az osztály anélkül nem fog működni.

Megjegyzések

  • " Egy koncerten nem engedheti meg, hogy ' ne engedje az embereknek, hogy a kerítésen át dobjanak dolgokat valakinek, aki ' s már a stadionban m. Bárminek, ami bejön vagy kijön, át kell mennie egy kapun. " De ' nem látom, hogy a konstruktor használata hogyan teszi biztonságosabbá az automatikus vezetést? Ha nem lennének kivitelezői követelmények (például érvényesítés), akkor előnyös lenne egy konstruktort használni?
  • Lehetővé teszi későbbi validálás hozzáadását a bináris kompatibilitás megsértése nélkül.
  • , vegye figyelembe, hogy a magántagoknak valóban magántulajdonban kell maradniuk. Ez ' bizonyos szempontból a magántagok létezését jelenti.
  • Az egész lényege az @Autowire kompatibilis tervezési jó gyakorlatok engedélyezése. A kivitelezők birtoklása a legtermészetesebb dolog az OOP-ban. Ellenkezőleg, (amit ön egyszerűnek és egyszerűbbnek nevez), az meglehetősen ijesztő. A kivitelezők eltávolításának nincsenek valós előnyei, ' egyáltalán nincs rajta egyszerűség. A kivitelezők az OOP legegyszerűbb módszerei közé tartoznak.Önmagában általában nagyon kevés bonyolultsággal bír, amiért érdemes megvalósítani a tavaszi IoC varázsát
  • A ' érték érdekében a Java általában amúgy nagyon bőbeszédű. Ha ' szeretné megszelídíteni e bőbeszédűség egy részét, akkor a kivitelezők kiküszöbölése valószínűleg nem okoz nagy nyomást.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük