javascript
Spring BeanPostProcessor接口详细使用
BeanPostProcessor接口簡介
BeanPostProcessor也稱為Bean后置處理器,它是Spring中定義的接口,在Spring容器的創(chuàng)建過程中(具體為Bean初始化前后)會回調(diào)BeanPostProcessor中定義的兩個方法。
BeanPostProcessor的具體代碼如下:
public interface BeanPostProcessor {//bean初始化之前@Nullabledefault Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean;}//bean初始化之后@Nullabledefault Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {return bean;} }postProcessBeforeInitialization方法會在每一個bean對象的初始化方法調(diào)用之前回調(diào);postProcessAfterInitialization方法會在每個bean對象的初始化方法調(diào)用之后被回調(diào)。
這兩個方法分別在init方法前后執(zhí)行,需要注意一點,我們定義一個類實現(xiàn)了BeanPostProcessor,默認(rèn)是會對整個Spring容器中所有的bean進(jìn)行處理。
既然是默認(rèn)全部處理,那么我們怎么確認(rèn)我們需要處理的某個具體的bean呢?
可以看到方法中有兩個參數(shù)。類型分別為Object和String,第一個參數(shù)是每個bean的實例,第二個參數(shù)是每個bean的name或者id屬性的值。所以我們可以第二個參數(shù),來確認(rèn)我們將要處理的具體的bean。
BeanPostProcessor示例
創(chuàng)建User對象
public class User implements InitializingBean, DisposableBean {public User() {System.out.println("實例化User構(gòu)造方法...");}public void initUser() {System.out.println("User初始化方法initUser...");}public void destroyUser() {System.out.println("User銷毀方法destroyUser...");}@Overridepublic void destroy() throws Exception {System.out.println("調(diào)用實現(xiàn)DisposableBean的destroy方法....");}@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("調(diào)用實現(xiàn)InitializingBean的afterPropertiesSet方法......");} }BeanPostProcessor實現(xiàn)類
public class UserPostProcessor implements BeanPostProcessor {public Object postProcessBeforeInitialization(Object bean, String beanName)throws BeansException {// 這邊只做簡單打印 原樣返回beanSystem.out.println("postProcessBeforeInitialization===="+beanName);return bean;}public Object postProcessAfterInitialization(Object bean, String beanName)throws BeansException {// 這邊只做簡單打印 原樣返回beanSystem.out.println("postProcessAfterInitialization===="+beanName);return bean;}}配置文件UserConfig
@Configuration public class UserConfig {@Bean(initMethod = "initUser",destroyMethod = "destroyUser")public User user() {return new User();}@Beanpublic UserPostProcessor userPostProcessor() {return new UserPostProcessor();} }測試類
public class Test {public static void main(String[] args) {ApplicationContext applicationContext = new AnnotationConfigApplicationContext(UserConfig.class);((AnnotationConfigApplicationContext) applicationContext).close();} }執(zhí)行結(jié)果:
實例化User構(gòu)造方法... postProcessBeforeInitialization====user 調(diào)用實現(xiàn)InitializingBean的afterPropertiesSet方法...... User初始化方法initUser... postProcessAfterInitialization====user 19:57:17.700 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@2437c6dc, started on Tue Oct 22 19:57:17 CST 2019 調(diào)用實現(xiàn)DisposableBean的destroy方法.... User銷毀方法destroyUser...總結(jié)
以上是生活随笔為你收集整理的Spring BeanPostProcessor接口详细使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring BeanFactoryPo
- 下一篇: Spring容器初始化和bean创建过程