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
Understanding Spring bean life cycle
Initialization callbacks
org.springframework.beans.factory.InitializingBean interface provide Initialization callbacks method as given below..
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"); } }
In the case of XML-based configuration metadata, we can use the init-method attribute to specify the name of the method that has a void no-argument signature. For example:
<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"); } }
Destruction callbacks
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"); } }
In the case of XML-based configuration metadata, we can use the destroy-method attribute to specify the name of the method that has a void no-argument signature. For example:
<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:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemalocation="http://www.springframework.org/schema/beans"> <bean autowire="byName" class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Triangle" destroy-method="cleanUp" id="triangle" init-method="myInit"> </bean> <bean class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Point" id="pointA"> <property name="x" value="0"></property> <property name="y" value="0"></property> </bean> <bean class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Point" id="pointB"> <property name="x" value="-20"></property> <property name="y" value="0"></property> </bean> <bean class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Point" id="pointC"> <property name="x" value="20"></property> <property name="y" value="0"></property> </bean> </beans>
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(); } }
InitializingBean 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
Default initialization and destroy methods
<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:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemalocation="http://www.springframework.org/schema/beans"> <bean autowire="byName" class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Triangle" id="triangle"> </bean> <bean class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Point" id="pointA"> <property name="x" value="0"></property> <property name="y" value="0"></property> </bean> <bean class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Point" id="pointB"> <property name="x" value="-20"></property> <property name="y" value="0"></property> </bean> <bean class="com.dineshonjava.sdnext.callbackLifecycle.tutorial.Point" id="pointC"> <property name="x" value="20"></property> <property name="y" value="0"></property> </bean> </beans>
InitializingBean 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
- Spring Interview Questions and Answers
- Spring AOP Interview Questions and Answers
- Spring MVC Interview Questions
- Spring Security Interview Questions and Answers
- Spring REST Interview Questions and Answers
- Spring Boot Interview Questions and Answers
- Spring Boot Microservices Interview Questions and Answers
- Dependency Injection (DI) in Spring
- Spring IoC Container
- What is Bean Factory in Spring
- ApplicationContext in Spring
- Bean Autowiring in Spring
- Spring Bean Scopes
- Create Custom Bean Scope in Spring Example
- Using ApplicationContextAware in Spring
- Spring Bean Life Cycle and Callbacks
- BeanPostProcessor in Spring
- BeanFactoryPostProcessor in Spring
- Annotations in Spring and Based Configuration
- Spring JSR-250 Annotations
- JSR 330 Annotations in Spring
- Spring @Component, @Repository, @Service and @Controller Stereotype Annotations
- Method injection with Spring using Lookup method property
- Spring AOP-Introduction to Aspect Oriented Programming
- @Aspect Annotation in Spring
- Spring AOP AspectJ @Before Annotation Advice Example
- Spring AOP Before Advice Example using XML Config
- Spring AOP AspectJ @After Annotation Advice Example
- Spring AOP After Advice Example using XML Config
- Spring AOP AspectJ @AfterReturning Annotation Advice Example
- Spring AOP After-Returning Advice Example using XML Config
- Spring AOP AspectJ @AfterThrowing Annotation Advice Example
- Spring AOP After Throwing Advice Example using XML Config
- Spring AOP AspectJ @Around Annotation Advice Example
- Spring AOP Around Advice Example using XML Config
- Spring AOP Proxies in Spring
- Spring AOP Transaction Management in Hibernate
- Spring Transaction Management
- Spring Declarative Transaction Management Example
- Spring AOP-Ordering of Aspects with Example
- Spring Security Java Based Configuration with Example
- Spring Security XML Namespace Configuration Example
<< Previous || Next >>
Very helpful tutorial..
not only good stuff but also you made blogspot look like your own website.
not only good stuff but also you made blogspot look like your own website.