Please pardon this Spring beginner question. I am reading chapter 4 of first edition and being introduced to both call-back method and Bean post processor.
Now I am just getting confused about the two, it seems like they both do sth. when the bean instance is created, so how can I differentiate the two? Maybe an example would be good?
My personal understanding is, if we have to find a difference, then call-back method is initiated when the bean gets actually created, the Bean post processor gets called slightly after the creation of the bean?Also, I think the diference might also be that initalization call-back method focus on one bean only while Beanpost procsso will pocess all the bean instances one by one?
Also, could anybody help me further explain the difference by comaring and contrasting JSR250 annotation @PreDestroy and @PostConstruct with the two concepts above?
Thank you very much for helping!
It’s been a while since I’ve used either of these, but I think the callback method and @PostConstruct methods you are referring to are the same thing. But to answer your question, the difference….
1) The @PostConstruct (or afterPropertiesSet) method is a method internal to a specific class that will be called after a bean is instantiated. This is really where you put type-specific actions.
2) The BeanPostProcessor will touch all Spring beans. So here’s where you can put cross-cutting functionality, not necessarily class-specific.
A small example… say I have a small address book application for keeping track of my friends and their addresses. If I have some crazy bug I can’t track down, I might use a BeanPostProcessor to wrap all my Spring beans with some logging, such as “now invoking Address.getStreet()…, now invoking Address.getCity()…”.
Now I might use a @PostConstruct method in Address to verify and look up zip codes against some web service for addresses where I only have city/state.
Now, I might not actually have one of my domain objects hitting a web service in reality, but the idea is to illustrate that a @PostConstruct can handle class specific stuff and a BeanPostProcessor can take care of things that span multiple classes.
Also it’s worth noting, that BeanPostProcessor has two methods to override: postProcessBeforeInitialization and postProcessAfterInitialization, which will let you decide what to run before and after the bean’s @PostConstruct method.