To use @PostConstruct and @PreDestroy you have to register the CommonAnnotationBeanPostProcessor at bean configuration or specifying the <context:annotation-config /> in the bean configuration file (spring.xml).
Circle.java
package com.dineshonjava.sdnext.jsr.tutorial; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; public class Circle { private Point center; @Resource(name="pointB") public void setCenter(Point center) { this.center = center; } public void draw() { System.out.println("Circle is drawn of center ("+center.getX()+", "+center.getY()+")"); } @PostConstruct public void initializeCircle() { //populates the circle data cache upon initialization... System.out.println("Init of Circle"); } @PreDestroy public void destroyCircle() { //clears the circle related cache upon destruction.. System.out.println("Destroy of Circle"); } }
Point.java
package com.dineshonjava.sdnext.jsr.tutorial; public class Point { private int x; private int y; /** * @return the x */ public int getX() { return x; } /** * @param x the x to set */ public void setX(int x) { this.x = x; } /** * @return the y */ public int getY() { return y; } /** * @param y the y to set */ public void setY(int y) { this.y = y; } }
DrawingApp.java
package com.dineshonjava.sdnext.jsr.tutorial; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author Dinesh * */ public class DrawingApp { /** * @param args */ public static void main(String[] args) { AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); context.registerShutdownHook(); Circle circle = (Circle) context.getBean("circle"); circle.draw(); } }
spring.xml
<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:>2. Using <context:annotation-config />spring.xml
<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p" xmlns:>Once you are done with creating source and bean configuration files, let us run the application. If everything is fine with your application, this will print the following message:
Output:Jul 14, 2012 1:57:00 AM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@145d068: startup date [Sat Jul 14 01:57:00 IST 2012]; root of context hierarchyJul 14, 2012 1:57:00 AM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [spring.xml]Jul 14, 2012 1:57:00 AM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4e79f1: defining beans [circle,pointA,pointB,pointC,center,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; root of factory hierarchyInit of Circle
Circle is drawn of center (-20, 0)
Destroy of Circle
Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…
Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…
Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…
Technology has emerged a lot in the last decade, and now we have artificial intelligence;…
Managing a database is becoming increasingly complex now due to the vast amount of data…
Overview In this article, we will explore Spring Scheduler how we could use it by…