Archief - [PROG]JAVA Dependency Injection met Spring - waarom setters?

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

forloRn_

Legacy Member
Goeiemiddag,

Ik ben Spring wat aan het verkennen en ik vraag me het volgende af: waarom zijn er setter methods nodig om dependencies te injecteren? Het is met Reflection toch perfect mogelijk om rechtstreeks aan je private members te zitten zonder de omweg via de setter? Nu loop je het risico dat de gebruiker de setters zit aan te roepen, terwijl ze enkel bedoeld zijn voor de dependency injection. :unsure:

Emerxill

Legacy Member
Omdat uw variabele rechtstreeks zetten gewoon bad practice is. In uw setters kunt ge bijv, indien nodig, nog aan validatie doen.
Daarnaast vraag ik mij af waarom de gebruikers de setters niet zouden mogen gebruiken? IoC is niet meer een manier om uw objecten te creëren, ik zie geen reden waarom de gebruiker achteraf die setter niet zelf zou mogen aanroepen...

Als ge niet wilt dat de gebruiker de variabele via de setter zet, kunt ge constructor-based injection overwegen. Ook hier is niets wat de gebruiker tegenhoudt om een nieuwe instance te maken via het new keyword.

Bavo aka Joske

Legacy Member
Ik herinner me van ver dat je property injection kon gebruiken op protected velden. Nu, dat is ver.

Een reden waarom setters handig zijn is voor unit testing, je kan dan gewoon zelf een implementatie starten en mocks als dependencies injecten. Wat geweldig handig is.

Validatie in een setter is gevaarlijk en te vermijden imo.

WHiSPy

Legacy Member
Validatie in 'n setter is inderdaad af te raden.

Voor dependencies die zeker injected moeten worden: constructor injection ofwel de afterPropertiesSet method overriden en zelf de controle doen dat je velden gezet zijn. :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan