Spring
provides InitializingBean and DisposableBean interfaces to handle bean life
cycle call backs.
InitializingBean
interface
InitializingBean
interface provides 'afterPropertiesSet' method, it is called by the bean
factory after it has set all bean properties supplied.
DisposableBean
interface
DisposableBean
interface provides destroy method, it is called by a BeanFactory on destruction
of a singleton bean.
Following
is the complete working application.
Author.java
package com.sample.pojo; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; public class Author implements InitializingBean, DisposableBean { private String firstName; private String lastName; private String dateOfBirth; private String country; public Author() { System.out.println("Constructor called"); } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(String dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Author [firstName=").append(firstName).append(", lastName=").append(lastName) .append(", dateOfBirth=").append(dateOfBirth).append(", country=").append(country).append("]"); return builder.toString(); } @Override public void afterPropertiesSet() throws Exception { System.out.println("\n**************************"); System.out.println("Following properties are set to author bean"); System.out.println("firstName : " + firstName); System.out.println("lastName : " + lastName); System.out.println("dateOfBirth : " + dateOfBirth); System.out.println("country : " + country); System.out.println("**************************\n"); } @Override public void destroy() throws Exception { System.out.println("\n**************************"); System.out.println("Destroying bean " + this); System.out.println("**************************"); } }
myConfiguration.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="osho" class="com.sample.pojo.Author"> <property name="firstName" value="Chandra Mohan" /> <property name="lastName" value="Jain" /> <property name="dateOfBirth" value="11 December 1931" /> <property name="country" value="India" /> </bean> </beans>
HelloWorld.java
package com.sample.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sample.pojo.Author; public class HelloWorld { public static void main(String args[]) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "myConfiguration.xml" }); Author osho = context.getBean("osho", Author.class); System.out.println(osho); ((ClassPathXmlApplicationContext) context).close(); } }
Output
Constructor called ************************** Following properties are set to author bean firstName : Chandra Mohan lastName : Jain dateOfBirth : 11 December 1931 country : India ************************** Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=India] ************************** Destroying bean Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=India] **************************
Note
a. It is recommended
that you do not use the InitializingBean interface because it unnecessarily
couples the code to Spring. Alternatively, use the @PostConstruct annotation or
specify a POJO initialization method. In the case of XML-based configuration
metadata, you use the init-method attribute to specify the name of the method
that has a void no-argument signature. With Java config, you use the initMethod
attribute of @Bean.
public
class Author {
public void initCheck() {
System.out.println("\n**************************");
System.out.println("Following
properties are set to author bean");
System.out.println("firstName
: " + firstName);
System.out.println("lastName
: " + lastName);
System.out.println("dateOfBirth
: " + dateOfBirth);
System.out.println("country
: " + country);
System.out.println("**************************\n");
}
}
<bean id="osho"
class="com.sample.pojo.Author" init-method="initCheck">
<property
name="firstName" value="Chandra Mohan" />
<property
name="lastName" value="Jain" />
<property name="dateOfBirth"
value="11 December 1931" />
<property
name="country" value="India" />
</bean>
Update
Author.java, myConfiguration.xml like below.
Author.java
package com.sample.pojo; public class Author { private String firstName; private String lastName; private String dateOfBirth; private String country; public Author() { System.out.println("Constructor called"); } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(String dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Author [firstName=").append(firstName).append(", lastName=").append(lastName) .append(", dateOfBirth=").append(dateOfBirth).append(", country=").append(country).append("]"); return builder.toString(); } public void initCheck() { System.out.println("\n**************************"); System.out.println("Following properties are set to author bean"); System.out.println("firstName : " + firstName); System.out.println("lastName : " + lastName); System.out.println("dateOfBirth : " + dateOfBirth); System.out.println("country : " + country); System.out.println("**************************\n"); } }
myConfiguration.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="osho" class="com.sample.pojo.Author" init-method="initCheck"> <property name="firstName" value="Chandra Mohan" /> <property name="lastName" value="Jain" /> <property name="dateOfBirth" value="11 December 1931" /> <property name="country" value="India" /> </bean> </beans>
HelloWorld.java
package com.sample.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sample.pojo.Author; public class HelloWorld { public static void main(String args[]) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "myConfiguration.xml" }); Author osho = context.getBean("osho", Author.class); System.out.println(osho); ((ClassPathXmlApplicationContext) context).close(); } }
Output
Constructor called ************************** Following properties are set to author bean firstName : Chandra Mohan lastName : Jain dateOfBirth : 11 December 1931 country : India ************************** Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=India]
b. It is recommended
that you do not use the DisposableBean callback interface because it
unnecessarily couples the code to Spring. Alternatively, use the @PreDestroy
annotation or specify a generic method that is supported by bean definitions.
With XML-based configuration metadata, you use the destroy-method attribute on
the <bean/>. With Java config, you use the destroyMethod attribute of
@Bean.
public
class Author {
public void cleanup() {
System.out.println("\n**************************");
System.out.println("Cleaning
up the bean " + this);
System.out.println("**************************\n");
}
}
<bean id="osho"
class="com.sample.pojo.Author" destroy-method="cleanup">
<property name="firstName"
value="Chandra Mohan" />
<property
name="lastName" value="Jain" />
<property
name="dateOfBirth" value="11 December 1931" />
<property
name="country" value="India" />
</bean>
Author.java
package com.sample.pojo; public class Author { private String firstName; private String lastName; private String dateOfBirth; private String country; public Author() { System.out.println("Constructor called"); } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getDateOfBirth() { return dateOfBirth; } public void setDateOfBirth(String dateOfBirth) { this.dateOfBirth = dateOfBirth; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("Author [firstName=").append(firstName).append(", lastName=").append(lastName) .append(", dateOfBirth=").append(dateOfBirth).append(", country=").append(country).append("]"); return builder.toString(); } public void cleanup() { System.out.println("\n**************************"); System.out.println("Cleaning up the bean " + this); System.out.println("**************************\n"); } }
myConfiguration.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="osho" class="com.sample.pojo.Author" destroy-method="cleanup"> <property name="firstName" value="Chandra Mohan" /> <property name="lastName" value="Jain" /> <property name="dateOfBirth" value="11 December 1931" /> <property name="country" value="India" /> </bean> </beans>
HelloWorld.java
package com.sample.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.sample.pojo.Author; public class HelloWorld { public static void main(String args[]) { ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "myConfiguration.xml" }); Author osho = context.getBean("osho", Author.class); System.out.println(osho); ((ClassPathXmlApplicationContext) context).close(); } }
Output
Constructor called Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=India] ************************** Cleaning up the bean Author [firstName=Chandra Mohan, lastName=Jain, dateOfBirth=11 December 1931, country=India] **************************
No comments:
Post a Comment