In this article, you’ll be given an overview of Spring Bean Life cycle managed by the spring container, including understanding of Spring containers and IoC. You’ll also get an overview of the spring bean life cycle call back handlers and post processors. The Spring Framework provide several call back methods to created a bean and some method to be destroy the bean in the Spring IoC Container.
@ImageSource-Youtube
Popular Tutorials
void afterPropertiesSet() throws Exception
public class Triangle implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { //To do some initialization works here System.out.println("InitializingBean init method is called for Triangle"); } }
<bean class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Triangle" id="triangle" init-method="myInit"></bean>
public class Triangle { public void myInit() { //To do some initialization works here System.out.println("My init method is called for Triangle"); } }
public class Triangle { //init callback @PostConstruct public void myInit() { //To do some initialization works here System.out.println("My init method is called for Triangle"); } }
void destroy() throws Exception
public class Triangle implements DisposableBean { @Override public void destroy() throws Exception { //To do some Destruction works here System.out.println("DisposableBean destroy method is called for Triangle"); } }
<bean class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Triangle" destroy-method="cleanUp" id="triangle"></bean>
public class Triangle { public void cleanUp() { //To do some Destruction works here System.out.println("cleanUp method is called for Triangle"); } }
public class Triangle { //destroy callback @PreDestroy public void myInit() { //To do some Destruction works here System.out.println("cleanUp method is called for Triangle"); } }
If you are using Spring’s IoC container in a non-web application environment; for example, in a rich client desktop environment; you register a shutdown hook with the JVM. Doing so ensures a graceful shutdown and calls the relevant destroy methods on your singleton beans so that all resources are released.
Triangle.java
package com.dineshonjava.sdnext.callbackLifecycle.tutorial; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; public class Triangle implements InitializingBean, DisposableBean { private Point pointA; private Point pointB; private Point pointC; /** * @param pointA the pointA to set */ public void setPointA(Point pointA) { this.pointA = pointA; } /** * @param pointB the pointB to set */ public void setPointB(Point pointB) { this.pointB = pointB; } /** * @param pointC the pointC to set */ public void setPointC(Point pointC) { this.pointC = pointC; } public void draw() { System.out.println("PointA is ("+pointA.getX()+", "+pointA.getY()+")"); System.out.println("PointB is ("+pointB.getX()+", "+pointB.getY()+")"); System.out.println("PointC is ("+pointC.getX()+", "+pointC.getY()+")"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("InitializingBean init method is called for Triangle"); } @Override public void destroy() throws Exception { System.out.println("DisposableBean destroy method is called for Triangle"); } public void myInit() { System.out.println("My init method is called for Triangle"); } public void cleanUp() { System.out.println("cleanUp method is called for Triangle"); } }
Point.java
package com.dineshonjava.sdnext.callbackLifecycle.tutorial; public class Point { private int x; private int y; /** * @return the x */ public int getX() { return x; } /** * @param x the x to set */ public void setX(int x) { this.x = x; } /** * @return the y */ public int getY() { return y; } /** * @param y the y to set */ public void setY(int y) { this.y = y; } }
Spring.xml
<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:>Once you are done with creating source and bean configuration files, let us run the following application. If everything is fine with your application, this will print the following message:package com.dineshonjava.sdnext.callbackLifecycle.tutorial; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author Dinesh Rajput * */ public class DrawingApp { /** * @param args */ public static void main(String[] args) { AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); context.registerShutdownHook(); Triangle triangle = (Triangle) context.getBean("triangle"); triangle.draw(); } }Output:Jul 1, 2012 2:48:33 PM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ab50cd: startup date [Sun Jul 01 14:48:33 IST 2012]; root of context hierarchyJul 1, 2012 2:48:33 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [spring.xml]Jul 1, 2012 2:48:33 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1543c88: defining beans [triangle,pointA,pointB,pointC]; root of factory hierarchyInitializingBean init method is called for Triangle
My init method is called for Triangle
PointA is (0, 0)
PointB is (-20, 0)
PointC is (20, 0)Jul 1, 2012 2:48:33 PM org.springframework.context.support.AbstractApplicationContext doCloseINFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext@ab50cd: startup date [Sun Jul 01 14:48:33 IST 2012]; root of context hierarchyDisposableBean destroy method is called for Triangle
cleanUp method is called for Triangle
<beans default-destroy-method="cleanUp" default-init-method="myInit" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:>Now again run the application with above the configuration file we will get the following output:Output:Jul 1, 2012 2:58:00 PM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ab50cd: startup date [Sun Jul 01 14:58:00 IST 2012]; root of context hierarchyJul 1, 2012 2:58:00 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [spring.xml]Jul 1, 2012 2:58:01 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@1543c88: defining beans [triangle,pointA,pointB,pointC]; root of factory hierarchyInitializingBean init method is called for Triangle
My init method is called for Triangle
PointA is (0, 0)
PointB is (-20, 0)
PointC is (20, 0)
DisposableBean destroy method is called for Triangle
cleanUp method is called for Triangle
Spring Related Topics you may like
Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…
Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…
Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…
Technology has emerged a lot in the last decade, and now we have artificial intelligence;…
Managing a database is becoming increasingly complex now due to the vast amount of data…
Overview In this article, we will explore Spring Scheduler how we could use it by…