This example presents the basic concept of using setter injection in Spring.
The technologies used are :
– Spring 4.3.4
– JDK 1.8
– Maven 3.3.9
You can convert this example to an Eclipse IDE project by going to folder where is the pom.xml is, and use the command :
mvn eclipse:eclipse
package javaspringexamples.spring.ioc.LifecycleCallbackMethods; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; /** * * @author mounir.sahrani@gmail.com * */ public class A { @PostConstruct public void init() throws Exception { System.out.println("A @PostConstruct-init() method invoked"); } @PreDestroy public void destroy() throws RuntimeException { System.out.println("A @PreDestroy-destroy() method invoked"); } }
package javaspringexamples.spring.ioc.LifecycleCallbackMethods; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; /** * * @author mounir.sahrani@gmail.com * */ public class B implements InitializingBean, DisposableBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("B InitializingBean-afterPropertiesSet() method invoked"); } @Override public void destroy() throws Exception { System.out.println("B DisposableBean-destroy() method invoked"); } }
package javaspringexamples.spring.ioc.LifecycleCallbackMethods; /** * * @author mounir.sahrani@gmail.com * */ public class C { public void init() throws Exception { System.out.println("C init-method=\"init\"-init() method invoked"); } public void destroy() throws RuntimeException { System.out.println("C destroy-method=\"destroy\"-destroy() method invoked"); } }
package javaspringexamples.spring.ioc.LifecycleCallbackMethods; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * * @author mounir.sahrani@gmail.com * */ public class Main { public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext( "classpath:/applicationContext.xml"); applicationContext.registerShutdownHook(); } }
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:annotation-config /> <bean class="javaspringexamples.spring.ioc.LifecycleCallbackMethods.A" /> <bean class="javaspringexamples.spring.ioc.LifecycleCallbackMethods.B" /> <bean id="c" class="javaspringexamples.spring.ioc.LifecycleCallbackMethods.C" init-method="init" destroy-method="destroy" /> </beans>
<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>javaspringexamples.spring</groupId> <artifactId>Lifecycle-Callback-Methods</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>example Lifecycle Callback Methods</name> <properties> <springframework.version>4.3.4.RELEASE</springframework.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
The output is :
A @PostConstruct-init() method invoked
B InitializingBean-afterPropertiesSet() method invoked
C init-method= »init »-init() method invoked
C destroy-method= »destroy »-destroy() method invoked
B DisposableBean-destroy() method invoked
A @PreDestroy-destroy() method invoked
Get the sources of the example from the following GitHub url