Basic spring lifecycle de-tour
- singleton: Creates the single shared instance of a bean. Default scope.
- prototype: Creates the new bean instance for each container request.
- request: Scoped to an HTTP web request. Only used for web apps.
- session: Scoped to an HTTP web session. Only used for web apps.
- global-session: Scoped to an global HTTP web session. Only used for web apps.
-
You can add custom code during bean initialization
- Calling custom business logic methods
- Setting up handles to resources (sockets, db, file etc)
-
You can add custom code during bean destruction
- Calling custom business logic methods
- Setting up handles to resources (sockets, db, file etc)
When using XML configuration,
-
Access modifier The method can have any access modifier (public, protected, private)
-
Return type The method can have any return type. However, "void' is most commonly used. If you give a return type just note that you will not be able to capture the return value. As a result, "void" is commonly used.
-
Method name The method can have any method name.
-
Arguments The method can not accept any arguments. The method should be no-arg.
There is a subtle point you need to be aware of with "prototype" scoped beans. For "prototype" scoped beans, Spring does not call the destroy method. Gasp!
QUESTION: How can I create code to call the destroy method on prototype scope beans
ANSWER: You can destroy prototype beans but custom coding is required.
- Create a custom bean processor. This bean processor will keep track of prototype scoped beans. During shutdown it will call the destroy() method on the prototype scoped beans. The custom processor is configured in the spring config file.
<bean id="customProcessor"
class="com.lifecycle.xmlconfiguration.CustomBeanProcessor">
</bean>
- The prototype scoped beans MUST implement the DisposableBean interface. This interface defines a "destory()" method.
public class HpLaptop implements ILaptop, DisposableBean {
...
// add a destroy method
@Override
public void destroy() throws Exception {
System.out.println("Machine shutting down...");
}
}
- The spring configuration must be updated to use the destroy-method of "destroy".
<bean id="myHpLaptop"
class="com.lifecycle.xmlconfiguration.LaptopService"
init-method="initStuff"
destroy-method="destroy"
scope="prototype">
<!-- setup setter injection -->
<property name="laptopService" ref="theLaptopService"></property>
</bean>
https://repo.spring.io/release/org/springframework/spring/
- Choose the latest stable release "*-dist.zip".
- Copy all the jar files under lib folder from the downloaded zip.
- Create a new folder name lib under your working directory.
- Paste those jar files under lib folder.
- Add classpath to your eclipse project.
- Right click on your "Project" >> "Properties" >> "Java Build Path" >> "Libraries" tab >> Click "Add JARs" >> "Select all the JAR files from you lib folder" >> "Apply and Close".
- Now there will be a "Referenced Libraries" folder which will have your all spring JAR files.
- Done
Right click on your project >> Run As >> Java Application