To control the spring bean life cycle spring has given two interfaces. They are:
- Initializing bean
- Disposable bean
Whenever we create the spring container object the following steps are carried out by the container.
- Spring bean object is created
- Dependency is established
- Check whether afterPropertiesSet() method is available or not. If it is available execute it.
- At the time of removal of object, check if destroy method is available. If it is available then execute it.
First create a Address bean under src as shown below.
File: com.ram.beans.Address.java
package com.ram.beans;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class Address implements InitializingBean, DisposableBean{
private String street;
private String city;
private String state;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Override
public void destroy() throws Exception {
System.out.println("destroy() method called ...");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet() method called ...");
}
}
Next create applicationContext.xml file under src. The file is given below.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="addr" class="com.ram.beans.Address"> <property name="street" value="Richmond"></property> <property name="city" value="Melbourne"></property> <property name="state" value="Victoria"></property> </bean> </beans>
Next create a main class under src as shown.
File: com.ram.app.BeanLifeCycle.java
package com.ram.app;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ram.beans.Address;
public class BeanLifeCycle {
public static void main(String[] args) {
AbstractApplicationContext container = new ClassPathXmlApplicationContext("applicationContext.xml");
Address address = container.getBean("address", Address.class);
System.out.println("Street = "+address.getStreet());
System.out.println("City = "+address.getCity());
System.out.println("State = "+address.getState());
// To remove spring bean objects available in container
container.registerShutdownHook();
}
}
Instead of using InitializingBean and DisposableBean we can use our own methods as the life cycle methods.
For Example:
public class Address{
public void init() throws Exception{
System.out.println("init() method called ...");
}
public void destroy() throws Exception{
System.out.println("destroy() method called ...");
}
}
If the spring container wants to call these methods, we have to configure in the spring configuration file
as shown below:
<bean id="addr" class="com.ram.beans.Address" init-method="init" destroy-method="destroy">

No comments:
Post a Comment