Using life cycle events on a bean
|
The life cycle events of a bean can be used to set values to the attributes of a bean using the init method.
We can associate the life cycle events of a bean to make calls to corresponding init and destroy method. The init and destroy method associated with a bean are given along with the bean definition. This way, a call is automatically made to these methods, as per the bean’s state.
Init method is called once the property of the bean is set.
Destroy method is called when the context associated with the bean is closed. This is when all the resources related to the context are cleared.
Step 1 :
Create a POJO with a method each for defining the steps to be taken at initial and destroy step. Note that the method name is user defined
File : Amount.java
package com.simpleCodeStuffs; public class Amount { private String val; public String getVal() { return val; } public void setVal(String val) { this.val = val; } public String toString(){ return ("amount bean val: "+val); } public void startUp(){ System.out.println("init() method called after properties to Amount are set. "); System.out.println(toString()); } public void cleanUp(){ System.out.println("destroy method called when application context is closed"); System.out.println("Releasing/destroying all resources"); System.out.println(toString()); } }
Step 2 :
Bean definition is given along with the init and destroy values. The method names correspondingly are given here.
File : Beans.xml
Step 3 : Create the main class
File : MainClass.java
package com.simpleCodeStuffs; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainClass { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "Beans.xml" }); Amount amt = (Amount) context.getBean("amount"); System.out.println("printing amount in main class " + amt); } }
Step 4: Run it. The output appears as below
Notice that, the destroy method has never been called. This is because the context is not closed.
Step 5 :
Make modifications in the main class to close the context. Note,we have initially used it as
ApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Beans.xml"}); Amount amt=(Amount)context.getBean("amount");
But, close() method is not defined on ApplicationContext. The method is rather defined on the implementation ClassPathXmlApplicationContext. So let us modify that part as well to implement our changes. Now the main class is
package com.simpleCodeStuffs; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainClass { public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"Beans.xml"}); context.close() // ApplicationContext context = new ClassPathXmlApplicationContext( // new String[] { "Beans.xml" }); Amount amt = (Amount) context.getBean("amount"); System.out.println("printing amount in main class " + amt); context.close(); // destroy method is called here } }
Step 6 : Run it. Now the output appears as :-
|