Table of Contents
- Tutorial Content: Spring tutorial for beginners
- BeanPostProcessors in Spring Example:
- 1.Country.java
- 2.InitCapitalPostProcessor.java
This is simple pojo class implementing BeanPostProcessor interface.
Create InitCapitalPostProcessor.java under package org.arpit.javapostsforlearning.Copy following content into InitCapitalPostProcessor.java.
1234567891011121314151617181920212223package org.arpit.javapostsforlearning;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;public class InitCapitalPostProcessor implements BeanPostProcessor{public Object postProcessAfterInitialization(Object bean, String beanName)throws BeansException {System.out.println("AfterInitialization : " + beanName);return bean; // you can return any other object as well}public Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {System.out.println("BeforeInitialization : " + beanName);return bean; // you can return any other object as well}}
- 4.BeanPostProcessorExampleMain.java
- 5.Run it
This is 14 of 16 parts of spring tutorial series:BeanPostProcessors in Spring
Tutorial Content: Spring tutorial for beginners
- Introduction to spring framework
- Spring interview questions
- Dependency injection(ioc) in spring
- Spring XML based configuration example
- Spring java based configuaration
- Dependency injection via setter method in spring
- Dependency injection via constructor in spring
- Spring Bean scopes with examples
- Initializing collections in spring
- Beans Autowiring in spring
- Inheritance in Spring
- Spring ApplicationContext
- Spring lifetime callbacks
- BeanPostProcessors in Spring
- Annotation based Configuration in spring
- Spring AOP tutorial
BeanPostProcessors interface provides methods that you can implement to have your own instantiation logic.Also you can write your own logic after spring IOC finishes instantiating, configuring, and initializing a bean by plugging in one or more BeanPostProcessor implementations.
You can configure multiple BeanPostProcessors
and also can decide the order in which they will run relative to each other by setting order property but for that BeanPostProcessors
have to implement ordered interface.
Extension of BeanPostProcessor
is BeanFactoryPostProcessor
interface which allows direct modification of bean definitions before a bean is instantiated
An ApplicationContext
will automatically register and process a bean that implements either of these interfaces, but a BeanFactory
would have to have a BeanPostProcessor
or BeanFactoryPostProcessor
registered with it programatically.
BeanPostProcessors in Spring Example:
For configuring spring in your eclipse ide please refer hello world example
1.Country.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package org.arpit.javapostsforlearning; public class Country { String countryName ; public String getCountryName() { return countryName; } public void setCountryName(String countryName) { this.countryName = countryName; } public void init() { System.out.println("In init block of country"); } public void destroy() { System.out.println("In destroy block of country"); } } |
2.InitCapitalPostProcessor.java</h2>
This is simple pojo class implementing BeanPostProcessor interface.
Create InitCapitalPostProcessor.java under package org.arpit.javapostsforlearning.Copy following content into InitCapitalPostProcessor.java.
[crayon-676776f88bf13219064464/]
Here we are writing very simple logic but you can write quite complex logic in above functions.You can note that you have object of bean class here so you can change it in whatever way you want and can return same or different object.
3.pplicationContext.xml
123456789101112
<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="country" class="org.arpit.javapostsforlearning.Country" init-method="init" destroy-method="destroy"> <property name="countryName" value="India"/> </bean> <bean class="org.arpit.javapostsforlearning.InitCapitalPostProcessor"/> </beans>
4.BeanPostProcessorExampleMain.java
This class contains main function.Create BeanPostProcessorExampleMain.java under package org.arpit.javapostsforlearning.Copy following content into BeanPostProcessorExampleMain.java
1234567891011121314151617
package org.arpit.javapostsforlearning; import org.springframework.context.support.AbstractApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class BeanPostProcessorExampleMain{ public static void main(String[] args) { AbstractApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Country countryObj = (Country) appContext.getBean("country"); System.out.println("Country Name: "+countryObj.getCountryName()); appContext.registerShutdownHook(); }}
Here you need to register a shutdown hook registerShutdownHook() method that is declared on the AbstractApplicationContext class. This will ensures a graceful shutdown and calls the relevant destroy methods.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="country" class="org.arpit.javapostsforlearning.Country" init-method="init" destroy-method="destroy"> <property name="countryName" value="India"/> </bean> <bean class="org.arpit.javapostsforlearning.InitCapitalPostProcessor"/> </beans> |
4.BeanPostProcessorExampleMain.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
package org.arpit.javapostsforlearning; import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class BeanPostProcessorExampleMain{ public static void main(String[] args) { AbstractApplicationContext appContext = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Country countryObj = (Country) appContext.getBean("country"); System.out.println("Country Name: "+countryObj.getCountryName()); appContext.registerShutdownHook(); } } |
5.Run it
1 2 3 4 5 6 7 |
BeforeInitialization : country In init block of country AfterInitialization : country Country Name: India In destroy block of country |
That’s all about BeanPostProcessors in Spring.