<div dir="ltr" style="text-align: justify;">
<div dir="ltr" style="text-align: justify;">
<div dir="ltr" style="text-align: justify;">
<div dir="ltr" style="text-align: justify;">
<div dir="ltr" style="text-align: justify;">
<div style="color: #274e13;">In this tutorial we discuss about the <i><b>BeanPostProcessor </b></i>and its need. <i><b>BeanPostProcessor </b></i>is interface that tells Spring to do some processing after initialization some beans.</div>
<div style="color: #274e13;"></div>
<p>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.</p>
<div class="separator" style="clear: both; text-align: center;"><img src="https://dineshonjava.com/wp-content/uploads/2012/07/going-beyond-dependency-injection.jpg" border="0" /></div>
<p><b><i>@ImageSource-SlideShare.net</i></b></p>
<div class="separator" style="clear: both; text-align: center;"><img src="https://dineshonjava.com/wp-content/uploads/2012/07/beanpostprocessor-in-spring.jpg" border="0" /></div>
<p><b><i>@ImageSource-SlideShare.net</i></b></p>
<p> ;</p>
<div style="color: #274e13;">Many processes in the <b><a href="https://dineshonjava.com/spring-ioc-container/">IoC container</a></b> were made to be extensible. A specific extensible process can be referred to as an extension point. One extension point, the <i><b>BeanPostProcessor </b></i>interface, allows the modification of a bean instance before and after the properties are set. Another extension point is the <i><b>BeanFactoryPostProcessor </b></i>interface which allows direct modification of bean definitions before a bean is instantiated.</div>
<div style="color: #274e13;">
<div style="background-color: #f2f9fc; border: 1px solid #c9e6f2; border-radius: 3px; padding: 16px; line-height: 1.45;"><span style="color: red; font-size: x-large; text-align: center;"><b>Popular Tutorials</b></span></p>
<ul style="text-align: left;">
<li><b><a href="https://dineshonjava.com/spring-tutorial/"><em><strong>Spring Tutorial</strong> </em></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-web-mvc-framework-chapter-38/"><strong><em>Spring MVC Web Tutorial </em></strong></a></b></li>
<li><b><a href="https://dineshonjava.com/introduction-to-spring-boot-a-spring-boot-complete-guide/"><strong>Spring Boot Tutorial</strong> </a></b></li>
<li><b><a href="https://dineshonjava.com/spring-security-take-baby-step-to-secure/"><em>Spring Security Tutorial</em></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-tutorial-with-example-aspect-advice-pointcut-joinpoint/"><em>Spring AOP Tutorial</em></a></b></li>
<li><b><a href="https://dineshonjava.com/using-spring-jdbc-framework-chapter-32/"><em>Spring JDBC Tutorial</em></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-hateoas-hypermedia-driven-restful-web-service/"><em><strong>Spring HATEOAS </strong></em></a></b></li>
<li><b><a href="https://dineshonjava.com/microservices-with-spring-boot/"><em><strong>Microservices with Spring Boot</strong></em></a></b></li>
<li><b><a href="https://dineshonjava.com/jax-rs-web-service-tutorial/"><strong><em>REST Webservice</em> </strong></a></b></li>
<li><b><a href="https://dineshonjava.com/core-java-baby-step-to-be-best-java-ian/"><em><strong>Core Java </strong></em></a></b></li>
<li><b><a href="https://dineshonjava.com/hibernate-3-on-baby-steps/"><em><strong>Hibernate Tutorial</strong></em></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-batch-process-with-example/"><strong><em>Spring Batch</em> </strong></a></b></li>
</ul>
</div>
<p> ;</p>
</div>
<div style="color: #274e13;">An <b><a href="https://dineshonjava.com/2012/06/application-context-in-spring.html">ApplicationContext </a></b>will automatically register and process a bean that implements either of these interfaces (<i><b>BeanPostProcessor </b></i>, <i><b>BeanFactoryPostProcessor </b></i>), but a <b><a href="https://dineshonjava.com/2012/06/what-is-bean-factory-in-spring.html">BeanFactory</a></b> would have to have a <i><b>BeanPostProcessor </b></i> or <i><b>BeanFactoryPostProcessor </b></i>registered with it programatically as given below.</div>
</div>
<pre class="highlight">..... 
// 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 
</pre>
<div style="color: #274e13;">Since this manual registration step is not convenient, and <a href="https://dineshonjava.com/application-context-in-spring/">ApplictionContexts</a> are functionally supersets of <a href="https://dineshonjava.com/what-is-bean-factory-in-spring/">BeanFactories</a>, it is generally recommended that <a href="https://dineshonjava.com/application-context-in-spring/">ApplicationContext</a> variants are used when bean post-processors are needed.</div>
<h2 style="color: #274e13;"><b>BeanPostProcessor</b></h2>
<div></div>
<div style="color: #274e13;">A <i><b>BeanPostProcessor </b></i>gives you a chance to process an instance of a bean created by the <b><a href="https://dineshonjava.com/spring-ioc-container/">IoC container</a></b> after it&#8217;s instantiation and then again after the initialization life cycle event has occurred on the instance. You could use this to process fields that were set, perform validation on a bean, or even look up values from a remote resource to set on the bean as defaults.</div>
<div style="color: #274e13;"></div>
<div style="color: #274e13;">Spring&#8217;s different <b>AOP proxies</b> for caching, transactions, etc. are all applied by <i><b>BeanPostProcessor </b></i>.</div>
</div>
<p>Lets see the following example which describe the <i><b>BeanPostProcessor </b></i> activity&#8230;<br />
<b>DisplayNameBeanPostProcessor.java</b></p>
<pre class="highlight">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; 
} 
} 
</pre>
<div style="color: #274e13;"><i><b>BeanPostProcessor </b></i>interface has two method&#8230;</div>
<div style="color: #274e13;">1. <b><i>postProcessAfterInitialization(Object bean, String beanName)</i></b> execute after initialization of each beans in the <b><a href="https://dineshonjava.com/2012/06/spring-ioc-container.html">Spring IoC Container</a></b>.</div>
<div style="color: #274e13;">2. <b><i>postProcessBeforeInitialization(Object bean, String beanName)</i></b> execute before initialization of each beans in the <b><a href="https://dineshonjava.com/2012/06/spring-ioc-container.html">Spring IoC Container</a></b>.</div>
<p><b>Triangle.java</b></p>
<pre class="highlight">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()+")"); 
 } 
} 
</pre>
<p><b>Point.java</b></p>
<pre class="highlight">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; 
 } 
} 
</pre>
<div style="color: #274e13;"><b><i>DisplayNameBeanPostProcessor</i></b> bean in the Spring IoC Container is automatically called when before and after any beans (triangle, pointA, pointB, pointC) creation. In the below configuration file has the <b><i>DisplayNameBeanPostProcessor</i></b> bean</div>
<p><b>spring.xml</b></p>
<pre class="highlight"><;beans xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p" xmlns:> 
<div style="color: #274e13;">If every thing is OK now run the following class file and see the result on console.</div> 
<b>DrawingApp.java</b> 
<pre class="highlight">package 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(); 
 } 
} 
</pre>
<p> ;</p>
<div style="background-color: #ff99cc; border-width: thin; border: solid;">
<div style="color: blue;"><b>Output:</b></div>
<div style="color: red;">Jul 2, 2012 11:28:23 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh</div>
<div style="color: red;">INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@ab50cd: startup date [Mon Jul 02 23:28:23 IST 2012]; root of context hierarchy</div>
<div style="color: red;">Jul 2, 2012 11:28:23 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions</div>
<div style="color: red;">INFO: Loading XML bean definitions from class path resource [spring.xml]</div>
<div style="color: red;">Jul 2, 2012 11:28:23 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons</div>
<div style="color: red;">INFO: 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 hierarchy</div>
<div style="color: blue;"><b>In Before bean Initialization method. Bean name is pointA</b></div>
<div style="color: blue;"><b>In After bean Initialization method. Bean name is pointA</b></div>
<div style="color: #274e13;"><b>In Before bean Initialization method. Bean name is pointB</b></div>
<div style="color: #274e13;"><b>In After bean Initialization method. Bean name is pointB</b></div>
<div style="color: #351c75;"><b>In Before bean Initialization method. Bean name is pointC</b></div>
<div style="color: #351c75;"><b>In After bean Initialization method. Bean name is pointC</b></div>
<p><b>In Before bean Initialization method. Bean name is triangle</b><br />
<b>In After bean Initialization method. Bean name is triangle</b><br />
<b>PointA is (0, 0)</b><br />
<b>PointB is (-20, 0)</b><br />
<b>PointC is (20, 0)</b></p>
</div>
</div>
<div style="color: #274e13;"></div>
<div style="color: #274e13;"><b>There are four beans (triangle, pointA, pointB, pointC) in the Spring IoC Container and both methods of the </b><b><i>BeanPostProcessor</i> interface is executes four times.</b></div>
<p> ;</p>
<div style="background-color: #f2f9fc; border-radius: 3px; border: 1px solid #c9e6f2; line-height: 1.45; padding: 16px;"><span style="color: red; font-size: x-large; text-align: center;"><b>Spring Related Topics you may like</b></span></p>
<ul>
<li><b><a href="https://dineshonjava.com/interview-questions-on-spring/"><span style="color: red;">Spring Interview Questions and Answers</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-interview-questions-and-answers/"><span style="color: red;">Spring AOP Interview Questions and Answers</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-mvc-interview-questions-and-answers/"><span style="color: red;">Spring MVC Interview Questions</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-security-interview-questions-and-answers/"><span style="color: red;">Spring Security Interview Questions and Answers</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-rest-web-services-interview-questions-and-answers/"><span style="color: red;">Spring REST Interview Questions and Answers</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-boot-interview-questions-and-answers/"><span style="color: red;">Spring Boot Interview Questions and Answers</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-boot-microservices-interview-questions-answers/"><span style="color: red;">Spring Boot Microservices Interview Questions and Answers</span></a></b></li>
<li><b><a href="https://dineshonjava.com/dependency-injection-in-spring/"><span style="color: red;">Dependency Injection (DI) in Spring </span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-ioc-container/"><span style="color: red;">Spring IoC Container</span></a></b></li>
<li><b><a href="https://dineshonjava.com/what-is-bean-factory-in-spring/"><span style="color: red;">What is Bean Factory in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/application-context-in-spring/"><span style="color: red;">ApplicationContext in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/bean-autowiring-in-spring/"><span style="color: red;">Bean Autowiring in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/understanding-bean-scopes/"><span style="color: red;">Spring Bean Scopes</span></a></b></li>
<li><b><a href="https://dineshonjava.com/create-custom-bean-scope-in-spring-example/"><span style="color: red;">Create Custom Bean Scope in Spring Example</span></a></b></li>
<li><b><a href="https://dineshonjava.com/using-applicationcontextaware-in-spring/"><span style="color: red;">Using ApplicationContextAware in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/bean-lifecycle-and-callbacks/"><span style="color: red;">Spring Bean Life Cycle and Callbacks</span></a></b></li>
<li><b><a href="https://dineshonjava.com/writing-beanpostprocessor-in-spring/"><span style="color: red;">BeanPostProcessor in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/writing-beanfactorypostprocessor-in/"><span style="color: red;">BeanFactoryPostProcessor in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/annotations-in-spring-and-based/"><span style="color: red;"> Annotations in Spring and Based Configuration</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-jsr-250-annotations/"><span style="color: red;">Spring JSR-250 Annotations</span></a></b></li>
<li><b><a href="https://dineshonjava.com/jsr-330-annotations-in-spring/"><span style="color: red;">JSR 330 Annotations in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/stereotype-annotations-in-spring/"><span style="color: red;">Spring @Component, @Repository, @Service and @Controller Stereotype Annotations</span></a></b></li>
<li><b><a href="https://dineshonjava.com/method-injection-with-spring-using-lookup-method-property/"><span style="color: red;">Method injection with Spring using Lookup method property</span></a></b></li>
<li><b><a href="https://dineshonjava.com/introduction-to-aop-in-spring/"><span style="color: red;">Spring AOP-Introduction to Aspect Oriented Programming</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aspect-annotation/"><span style="color: red;">@Aspect Annotation in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-aspectj-before-annotation-advice-example/"><span style="color: red;"> Spring AOP AspectJ @Before Annotation Advice Example<br />
</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-before-advice-example-using-xml-config/"><span style="color: red;"> Spring AOP Before Advice Example using XML Config</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-aspectj-after-annotation-advice-example/"><span style="color: red;"> Spring AOP AspectJ @After Annotation Advice Example</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-after-advice-example-using-xml-config/"><span style="color: red;"> Spring AOP After Advice Example using XML Config</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-aspectj-after-returning-annotation-advice-example/"><span style="color: red;"> Spring AOP AspectJ @AfterReturning Annotation Advice Example</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-after-returning-advice-example-using-xml-config/"><span style="color: red;"> Spring AOP After-Returning Advice Example using XML Config</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-aspectj-after-throwing-annotation-advice-example/"><span style="color: red;"> Spring AOP AspectJ @AfterThrowing Annotation Advice Example</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-after-throwing-advice-example-using-xml-config/"><span style="color: red;"> Spring AOP After Throwing Advice Example using XML Config</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-aspectj-around-annotation-advice-example/"><span style="color: red;"> Spring AOP AspectJ @Around Annotation Advice Example</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-around-advice-example-using-xml-config/"><span style="color: red;"> Spring AOP Around Advice Example using XML Config</span></a></b></li>
<li><b><a href="https://dineshonjava.com/understanding-aop-proxies-chapter-31/"><span style="color: red;">Spring AOP Proxies in Spring</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-transaction-management-in/"><span style="color: red;"> Spring AOP Transaction Management in Hibernate</span></a></b></li>
<li><b><a href="https://dineshonjava.com/transaction-management-in-spring/"><span style="color: red;">Spring Transaction Management</span></a></b></li>
<li><b><a href="https://dineshonjava.com/declarative-transaction-management/"><span style="color: red;">Spring Declarative Transaction Management Example</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-aop-ordering-of-aspects-with-example/"><span style="color: red;">Spring AOP-Ordering of Aspects with Example</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-security-java-based-configuration-with-example/"><span style="color: red;">Spring Security Java Based Configuration with Example</span></a></b></li>
<li><b><a href="https://dineshonjava.com/spring-security-xml-namespace-configuration-example/"><span style="color: red;">Spring Security XML Namespace Configuration Example</span></a></b></li>
</ul>
<p> ;</p>
</div>
<p><b>In <a href="https://dineshonjava.com/writing-beanfactorypostprocessor-in/">Next Chapter</a> we will discuss about </b><a href="https://dineshonjava.com/writing-beanfactorypostprocessor-in/"><b>BeanFactoryPostProcessor in Spring</b></a><b> in Application.</b><br />
<b> </b><br />
<b> <;<; <a href="https://dineshonjava.com/bean-lifecycle-and-callbacks/">Previous</a> || <a href="https://dineshonjava.com/writing-beanfactorypostprocessor-in/">Next</a> >;>; </b></p>
</div>
</div>
<div class="wp-post-navigation"> 
									 <div class="wp-post-navigation-pre"> 
									 <a href="https://dineshonjava.com/bean-lifecycle-and-callbacks/">Previous</a> 
									 </div> 
									 <div class="wp-post-navigation-next"> 
									 <a href="https://dineshonjava.com/writing-beanfactorypostprocessor-in/">Next</a> 
									 </div> 
									</div>
<script type="text/javascript">
jQuery(document).ready(function($) {
 $.post('https://dineshonjava.com/wp-admin/admin-ajax.php', {action: 'mts_view_count', id: '662'});
});
</script>
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…