Java bean,Spring-beans-BeanPostProcessor/InitializingBean

 2023-10-15 阅读 32 评论 0

摘要:1.Bean的初始化(InitializingBean) 早期的spring xml形式,如果配置bean的時候,寫法如下 <bean id = "beanId" class="全限定名" init-method="abc"></bean> 上面的意思是如果有這樣一個類࿰

1.Bean的初始化(InitializingBean)
早期的spring xml形式,如果配置bean的時候,寫法如下

<bean id = "beanId" class="全限定名" init-method="abc"></bean>

上面的意思是如果有這樣一個類,那么當這個類中所有的屬性都賦值完畢之后,則會調用該類的abc方法

public class A{@Resourcepublic B b;public void abc(){System.out.println("屬性B已被填充完畢,執行初始化方法abc");}   
}

后來xml形式逐漸被淘汰了,我們可以使用實現InitializingBean接口的方法設置初始化方法,代碼就變成了下面這樣

public class A  implements InitializingBean{@Resourcepublic B b;// 顧名思義,在類A的所有屬性填充完畢之后(本類的只有1個屬性b)@Overridepublic void afterPropertiesSet() throws Exception {System.out.println("屬性B已被填充完畢,執行初始化方法abc");}  
}

上述的afterPropertiesSet就叫做初始化方法,初始化方法一定是在屬性填充完畢之后才執行的,這也叫Bean的初始化(指的就是執行這方法)

Java bean,2.Bean的初始化前后處理(BeanPostProcessor)
如果想在Bean的初始化之前做一些事情,之后再做一些事情,則需要實現BeanPostProcessor接口

@Component
public class MyPostProcessor implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("初始化方法afterPropertiesSet之前執行");return bean;}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("初始化方法afterPropertiesSet之后執行");return bean;}
}

注意:假如一個類C沒有實現InitializingBean接口,那么理論上C是沒有初始化方法的,但這并不妨礙BeanPostProcessor掛載到這個類C上,這個時候會在類C的所有屬性初始化之后,直接調用postProcessBeforeInitialization方法,綜上所屬,我們可以假裝認為這個類C存在一個空的初始化方法,這樣就好理解了

進一步得出結論:如果有一個類實現了BeanPostProcessor,那么spring容器中所有的bean都會執行BeanPostProcessor接口里的那兩個方法,而如果一個類實現了InitalizingBean,那么該類自己實例化的時候,會執行InitalizingBean接口里的方法,而不影響其他bean的流程

順序
1.BeanPostProcess before
2.InitalizingBean after
3.BeanPostProcess after

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/137136.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息