Module 2: Spring Flashcards
Wat is Inversion of Control (IoC)?
Een ontwikkelconcept die de controle flow van het traditionele procedural programming omdraait: In plaats van generieke taken aan te roepen vanuit de eigen code, roept het framework de eigen code aan.
In het Spring framework betekent dit dat je de controle over het maken en instantiëren van de beans aan de Spring IoC-container geeft.
Hoe implementeert Spring IoC?
Middels Dependency Injection en zogeheten beans.
Wat zijn de voordelen van IoC?
- Minder code; de generieke taken worden buiten het component aangeroepen en componenten hoef je niet zelf op te bouwen en te configureren.
- Beter testbaar doordat je een mock of stub kan injecteren. De componenten hoeven niet zelf instanties aan te maken van objecten.
- De code kan zich richten op één taak, dus betere en overzichtelijke codemeer specifiek zijn kunnen ze beter worden hergebruikt
- Loose coupling: componenten hebben geen kennis of benodigdheden van onderdelen in andere componenten
- Lifecycle: er kan worden gezorgd dat de componenten correct worden geïnitialiseerd en afgesloten.
- Doordat de componenten minder generieke taken hebben kunnen ze makkelijker worden herbruikt.
Wat is Dependency Injection (DI)?
Dependency Injection is een techniek waarbij objecten worden geleverd die een object nodig heeft (zijn afhankelijkheden) in plaats van ze zelf te laten construeren.
Welke injection types bestaan er?
- Constructor injection
- Field injection (field or setter)
- Interface injection (Not supported by Spring)
Welk injection type is minder flexibel?
- Field injection. (not setter)
It is harder to inject through a field injection than a (public) constructor/method.
Wat is de application lifecycle? (De applicatiecontext lifecycle)
- Initialization
- Use
- Destruction
Bij de initialisatie wordt de context opgezet. Vervolgens is Use waar de applicatie is opgestart en gebruikt kan worden. Bij het afsluiten van de Spring applicatie is het soms nog nodig om bijvoorbeeld connecties af te sluiten wat mogelijk is in de Destruction fase.
Wat is de bean lifecycle?
Spring instantieert de Bean
Spring injecteert waarden en Bean referenties in de properties van de Bean
Als de Bean BeanNameAware implementeert: Spring geeft het Bean ID (naam) mee via de setBeanName() methode.
Als de Bean BeanFactoryAware implementeert: Spring geeft de Bean factory mee via de setBeanFactory() methode.
Als de Bean ApplicationContextAware implementeert: Spring geeft de omvattende application context mee via de setApplicationContext() methode.
Als de Bean BeanPostProcessor implementeert: Spring roept de postProcessBeforeInitialization() methode aan.
Als de Bean InitializingBean implementeert: Spring roept de afterPropertiesSet() methode aan. Vergelijkbaar: Spring roept de init-method aan indien deze is gespecificeerd.
Als de Bean BeanPostProcessor implementeert: Spring roept de postProcessAfterInitialization() methode aan.
Bean is klaar voor gebruik.
Als de Bean de DisposableBean interface implementeert: Spring roept de destroy() methode aan.
Spring roept de custom destroy-method aan, indien deze is gespecificeerd.
Wat zijn de bean scopes?
- Singleton
- Prototype
- Request
- Session
- GlobalSession
Wat zijn Spring profiles?
Met Spring profiles kunnen beans worden toegewezen aan verschillende profielen, bijvoorbeeld dev, test en prod.
Een spring profiel kan worden ingesteld op klasse-niveau of op methode-niveau.
Welke drie manieren zijn er om beans te definieren?
- Via XML
- Via Configuratie klassen waar methodes beans contrueren
- Via het markeren van klassen als een blueprint voor een bean en Spring deze dan zelf te laten instantiëren via component scanning.
Wat doet de @Autowired annotatie?
Met @Autowired injecteert Spring hier automatisch de benodigde bean, of gooit een exceptie als er geen bean is gevonden.
Wat doet de @Component annotatie?
@Component (of een variant daar van): klasse welke gebruikt kan worden door het Spring Framework wanneer binnen een package welke staat aangegeven in een @ComponentScan
Wat doet de @Qualifier annotatie?
@Qualifier: geeft aan welke bean geinjecteerd moet worden indien meerdere beans zijn gevonden.
Wat doet de @Resource annotatie?
@Resource: Een annotatie van JSR-250, doet hetzelfde als de combinatie va @Autowired en @Qualifier