Spring init-method and destroy-method - Example
The init-method and destroy-method are attributes of Spring bean configuration file to perform certain actions upon bean initialization and destruction.
init-method is called after bean initialization and the destroy-method is called during before bean destruction by container.
Annotations @PostConstruct and @PreDestroy, standardized by JSR-250, are generally considered the best practice for obtaining lifecycle callbacks in a modern Spring application.
init-method and destroy-method are alternatives to InitializingBean and DisposableBean.
Related topic,
Related topic,
Complete Example
We are creating a simple maven project. You could clone the code from our GitHub repo.
Final Project Directory
Complete pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.knf.dev.demo</groupId>
<artifactId>spring-init-method-destroy-method-example</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.1.0</version>
</dependency>
</dependencies>
</project>
Create UserService class
package com.knf.dev.demo;
public class UserService {
private String username;
public void init() {
System.out.println("Perform initialization task.");
System.out.println("Username= "+username);
}
public void destroy() {
System.out.println("Perform destructive task or release resources.");
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
Create XML for Spring init-method and destroy-method
<?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="userService" class="com.knf.dev.demo.UserService"
init-method="init"
destroy-method="destroy">
<property name="username" value="Scott Morrison"/>
</bean>
</beans>
Create main class - Application.java
package com.knf.dev.demo;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Application {
public static void main(String[] args) {
AbstractApplicationContext context =
new ClassPathXmlApplicationContext("spring-config.xml");
UserService userService = (UserService)context.getBean("userService");
System.out.println("User Name= "+ userService.getUsername());
context.close();
}
}
The AbstractApplicationContext.close() method will close the application context, destroying all cached singleton beans and perform finalization like calling the destroy methods.
Console Output:
Perform initialization task.
Username= Scott Morrison
User Name= Scott Morrison
Perform destructive task or release resources.
Perform initialization task.
Username= Scott Morrison
User Name= Scott Morrison
Perform destructive task or release resources.
Source code
Are you preparing for Spring certification or preparing for Spring interview? Then below examples are interesting for you!