Spring Bean Life Cycle
- When the class is created we can see there are 'Aware' interfaces that get inialized
- BeanNameAware
- BeanFactoryAware
- ApplicationContextAware
Shutdown
Container Shutdown -> Disponable Bean's destroy() -> Call custom destroy method -> Terminated
Callback Interfaces
- Spring has two interfaces you can implement for call back events
-
InitializingBean.afterPropertiesSet()
- called after properties are set
-
DisposableBean.destroy()
- called during bean destruction in shutdown
Life Cycle Annotations
- Spring has two annotations you can use to hook into the bean life cycle
-
@PostConstruct
- called after the bean has been constructed but before its returned to the requesting object
-
@PreDestroy
- called just before the bean is destroyed by the container
Bean Post Processors
- Gives you a means to tap into the Spring context life cycle and interact with beans as they are processed
- Implement interface BeanPostProcessor
-
postProcessBeforeInitialization
- called before bean initialization method
-
postProcessAfterInitialization
- called after bean initialization
Note: The guru admits in all his years he has never used these
'Aware' Interfaces
- Spring has over 14 Aware Interfaces
- These are used to accses the Spring Framework infrastructure
- Rarely used by Devs, mostly used within the framework itself
The more useful ones:
- ApplicationEventPublisherAware - used for creating custom events inside spring and set up event listeners
- BeanFactoryAware - If you need to handle a bean within a process
Spring Bean Scopes
- Singleton (default) - Only one instance of the bean is created in the IoC container
- Prototype - A new instance is created each time the bean is requested
- Request - Single instance per http request.*
- Session - Single instance per http session.*
- Global-session - A single instance per global session. Typically only used in a Portlet context.*
- Application - bean is scoped to the lifecycle of a ServletContext.*
- Websocket - Scopes a single bean definition to the lifecycle of a WebSocket.*
- Custom scope - extensible, define your own "Scope" interface. See docs for details
*Only valid in the contex of a web-aware Spring ApplicationContext
No declaration is needed for singleton scope.
In Java configuration use the @Scope annotation. We see the xml configuaration above.
No Comments