BeanPostProcessor is interface that tells Spring to do some processing after initialization some beans.This allows you to add some custom logic before and after spring bean creation.
@ImageSource-SlideShare.net
@ImageSource-SlideShare.net
..... // create BeanFactory ConfigurableBeanFactory factory = new XmlBeanFactory(new FileSystemResource("spring.xml")); // now register some beans // now register any needed BeanPostProcessors DisplayNameBeanPostProcessor postProcessor = new DisplayNameBeanPostProcessor(); factory.addBeanPostProcessor(postProcessor); ..... // now start using the factory
Lets see the following example which describe the BeanPostProcessor activity…
DisplayNameBeanPostProcessor.java
package com.dineshonjava.sdnext.beanPostProcessor.tutorial; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class DisplayNameBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("In After bean Initialization method. Bean name is "+beanName); return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("In Before bean Initialization method. Bean name is "+beanName); return bean; } }
Triangle.java
package com.dineshonjava.sdnext.beanPostProcessor.tutorial; public class Triangle { private Point pointA; private Point pointB; private Point pointC; /** * @param pointA the pointA to set */ public void setPointA(Point pointA) { this.pointA = pointA; } /** * @param pointB the pointB to set */ public void setPointB(Point pointB) { this.pointB = pointB; } /** * @param pointC the pointC to set */ public void setPointC(Point pointC) { this.pointC = pointC; } public void draw() { System.out.println("PointA is ("+pointA.getX()+", "+pointA.getY()+")"); System.out.println("PointB is ("+pointB.getX()+", "+pointB.getY()+")"); System.out.println("PointC is ("+pointC.getX()+", "+pointC.getY()+")"); } }
Point.java
package com.dineshonjava.sdnext.beanPostProcessor.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; } }
spring.xml
<beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:>If every thing is OK now run the following class file and see the result on console.DrawingApp.javapackage com.dineshonjava.sdnext.beanPostProcessor.tutorial; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author Dinesh Rajput * */ public class DrawingApp { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Triangle triangle = (Triangle) context.getBean("triangle"); triangle.draw(); } }
Output:Jul 2, 2012 11:28:23 PM org.springframework.context.support.AbstractApplicationContext prepareRefreshINFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ab50cd: startup date [Mon Jul 02 23:28:23 IST 2012]; root of context hierarchyJul 2, 2012 11:28:23 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [spring.xml]Jul 2, 2012 11:28:23 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletonsINFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@14c1103: defining beans [triangle,pointA,pointB,pointC,com.sdnext.beanPostProcessor.tutorial.DisplayNameBeanPostProcessor#0]; root of factory hierarchyIn Before bean Initialization method. Bean name is pointAIn After bean Initialization method. Bean name is pointAIn Before bean Initialization method. Bean name is pointBIn After bean Initialization method. Bean name is pointBIn Before bean Initialization method. Bean name is pointCIn After bean Initialization method. Bean name is pointCIn Before bean Initialization method. Bean name is triangle
In After bean Initialization method. Bean name is triangle
PointA is (0, 0)
PointB is (-20, 0)
PointC is (20, 0)
In Next Chapter we will discuss about BeanFactoryPostProcessor in Spring in Application.
<< Previous || Next >>
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…