When a bean is instantiated, it may be required to perform some initialization to get it into a usable state. Similarly, when the bean is no longer required and is removed from the container, some cleanup may be required.
To define setup and teardown for a bean, we simply declare the <bean> with init-method and/or destroy-method parameters.
- The init-method attribute specifies a method that is to be called on the bean immediately upon instantiation.
- Similarly, destroy-method specifies a method that is called just before a bean is removed from the container.
In the case of XML-based configuration metadata, you can use the init-method attribute to specify the name of the method that has a void no-argument signature. For example:
<bean id="exampleBean" class="examples.ExampleBean" init-method="init"/>
Example
spring-config.xml
HelloWorld.java
<?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-3.0.xsd"> <bean id="helloWorld" class="org.techmight.HelloWorld" scope="prototype"> <property name="message" value="Hello World from TechMight Solutions!"/> </bean> <bean id="user" class="org.techmight.User" init-method="init" destroy-method="destroy"> <property name="hello"> <ref local="helloWorld"/> </property> </bean> </beans>
HelloWorld.java
package org.techmight; /** * @author TechMight Solutions */ public class HelloWorld { private String message; public String getMessage() { return ("Your Message: " + message); } public void setMessage(String message) { this.message = message; } }
User.java
MainApp.java
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.
Note that here we have registered a shutdown hook registerShutdownHook() method declared on the AbstractApplicationContext class. This will ensures a graceful shutdown and calls the relevant destroy methods.
Output
User Bean is going through init.
Your Message : Hello World from TechMight Solutions! (From User class)
User Bean will be destroyed now.
package org.techmight; /** * @author TechMight Solutions */ public class User { HelloWorld hello; public HelloWorld getHello() { return hello; } public void setHello(HelloWorld hello) { this.hello = hello; } public void init() { System.out.println("User Bean is going through init."); } public void destroy() { System.out.println("User Bean will be destroyed now."); } public void execute() { String response = getHello().getMessage(); System.out.println(response + " (From User class) "); } }
MainApp.java
package org.techmight; /** * @author TechMight Solutions */ import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); User user = (User) context.getBean("user"); user.execute(); context.registerShutdownHook(); } }
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.
Note that here we have registered a shutdown hook registerShutdownHook() method declared on the AbstractApplicationContext class. This will ensures a graceful shutdown and calls the relevant destroy methods.
Output
User Bean is going through init.
Your Message : Hello World from TechMight Solutions! (From User class)
User Bean will be destroyed now.
No comments:
Post a Comment
Your comments are very much valuable for us. Thanks for giving your precious time.