最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用講解

 更新時(shí)間:2022年11月18日 08:29:11   作者:氵奄不死的魚(yú)  
這篇文章主要介紹了Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧

前言

BeanPostProcessor 接口定義了一個(gè)你可以自己實(shí)現(xiàn)的回調(diào)方法,來(lái)實(shí)現(xiàn)你自己的實(shí)例化邏輯、依賴(lài)解決邏輯等,如果你想要在Spring完成對(duì)象實(shí)例化、配置、初始化之后實(shí)現(xiàn)自己的業(yè)務(wù)邏輯,你可以補(bǔ)充實(shí)現(xiàn)一個(gè)或多個(gè)BeanPostProcessor的實(shí)現(xiàn)。

BeanFactoryPostProcessor的定義和BeanPostProcessor相似,有一個(gè)最主要的不同是:BeanFactoryPostProcessor可以對(duì)bean的配置信息進(jìn)行操作;更確切的說(shuō)Spring IOC容器允許BeanFactoryPostProcessor讀取配置信息并且能夠在容器實(shí)例化任何其他bean(所有的實(shí)現(xiàn)了BeanFactoryPostProcessor接口的類(lèi))之前改變配置信息

BeanPostProcessor

接口定義

public interface BeanPostProcessor {
	@Nullable
	default Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}
	@Nullable
	default Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		return bean;
	}
}

postProcessBeforeInitialization和postProcessAfterInitialization

入?yún)⑹?bean示例和beanName,此方法內(nèi)可以對(duì)bean進(jìn)行處理并且返回一個(gè)對(duì)象,更改bean實(shí)例,例如代理,修改對(duì)象數(shù)據(jù)

執(zhí)行時(shí)機(jī)

執(zhí)行時(shí)機(jī)參考

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#initializeBean(java.lang.String, java.lang.Object, org.springframework.beans.factory.support.RootBeanDefinition)

if (mbd == null || !mbd.isSynthetic()) {
			wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
		}
		try {
			invokeInitMethods(beanName, wrappedBean, mbd);
		}
		catch (Throwable ex) {
			throw new BeanCreationException(
					(mbd != null ? mbd.getResourceDescription() : null),
					beanName, "Invocation of init method failed", ex);
		}
		if (mbd == null || !mbd.isSynthetic()) {
			wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
		}

即整個(gè)bean已經(jīng)加載完畢,依賴(lài)的bean已經(jīng)注入完畢,分別在,執(zhí)行初始化方法前和方法后執(zhí)行

初始化方法指的是執(zhí)行InitializingBean的afterPropertiesSet方法

初始化方法指的是bean實(shí)現(xiàn)了InitializingBean接口,對(duì)應(yīng)的方法為afterPropertiesSet

BeanFactoryPostProcessor

接口定義

FunctionalInterface
public interface BeanFactoryPostProcessor {
	void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

入?yún)⒕褪莃eanFactory,可以對(duì)beanFactory進(jìn)行修改

例如通過(guò)beanFactory修改beanDefination,添加屬性

public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        System.out.println("調(diào)用MyBeanFactoryPostProcessor的postProcessBeanFactory");
        BeanDefinition bd = beanFactory.getBeanDefinition("myJavaBean");
        MutablePropertyValues pv =  bd.getPropertyValues();  
        if (pv.contains("remark")) {  
            pv.addPropertyValue("remark", "在BeanFactoryPostProcessor中修改之后的備忘信息");  
        }  
    }
}

執(zhí)行時(shí)機(jī)

在bean實(shí)例化之前執(zhí)行,在invokeBeanFactoryPostProcessors中。

到此這篇關(guān)于Java BeanPostProcessor與BeanFactoryPostProcessor基礎(chǔ)使用講解的文章就介紹到這了,更多相關(guān)Java BeanPostProcessor內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java遞歸以及根據(jù)節(jié)點(diǎn)取子集合方式

    Java遞歸以及根據(jù)節(jié)點(diǎn)取子集合方式

    文章介紹了Java中遞歸的使用方法,包括如何根據(jù)節(jié)點(diǎn)構(gòu)建樹(shù)形結(jié)構(gòu)以及如何反向遞歸獲取所有子節(jié)點(diǎn),提供了遞歸方法的參數(shù)解釋和示例代碼,希望對(duì)大家有所幫助
    2024-12-12
  • Struts2學(xué)習(xí)教程之輸入校驗(yàn)示例詳解

    Struts2學(xué)習(xí)教程之輸入校驗(yàn)示例詳解

    這篇文章主要給大家介紹了關(guān)于Struts2學(xué)習(xí)教程之輸入校驗(yàn)的相關(guān)資料,文中通過(guò)示例介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用struts2具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • IDEA 如何導(dǎo)入別人的javaweb項(xiàng)目進(jìn)行部署

    IDEA 如何導(dǎo)入別人的javaweb項(xiàng)目進(jìn)行部署

    這篇文章主要介紹了IDEA 如何導(dǎo)入別人的javaweb項(xiàng)目進(jìn)行部署,本文給大家分享我的詳細(xì)部署過(guò)程及遇到問(wèn)題解決方法,需要的朋友可以參考下
    2023-03-03
  • JavaGUI常用三種布局使用介紹

    JavaGUI常用三種布局使用介紹

    這篇文章主要介紹了JavaGUI常用三種布局-FlowLayout、BorderLayout、GridLayout,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-03-03
  • java中List數(shù)組用逗號(hào)分隔開(kāi)轉(zhuǎn)成字符串2種方法

    java中List數(shù)組用逗號(hào)分隔開(kāi)轉(zhuǎn)成字符串2種方法

    在我們?nèi)粘i_(kāi)發(fā)中,在前后端交互的時(shí)候會(huì)遇到多個(gè)id或其他字段存放到一個(gè)字段中,這時(shí)我們會(huì)遇到一個(gè)List(集合)---->String(單個(gè)字段),這篇文章主要給大家介紹了關(guān)于java中List數(shù)組用逗號(hào)分隔開(kāi)轉(zhuǎn)成字符串的2種方法,需要的朋友可以參考下
    2023-10-10
  • MyBatis中如何獲取Oracle序列

    MyBatis中如何獲取Oracle序列

    文章介紹了在使用MyBatis時(shí),如何通過(guò)獲取序列的下一個(gè)值來(lái)完成某些功能操作,并在之后進(jìn)行數(shù)據(jù)的添加操作,文中特別強(qiáng)調(diào)了在獲取序列值后不能單獨(dú)執(zhí)行插入操作,否則會(huì)報(bào)錯(cuò)
    2024-12-12
  • java springboot poi 從controller 接收不同類(lèi)型excel 文件處理

    java springboot poi 從controller 接收不同類(lèi)型excel 文件處理

    這篇文章主要介紹了java springboot poi 從controller 接收不同類(lèi)型excel 文件處理,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Spring-cloud Config Server的3種配置方式

    Spring-cloud Config Server的3種配置方式

    這篇文章主要介紹了Spring-cloud Config Server的3種配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java繼承方法重寫(xiě)實(shí)現(xiàn)原理及解析

    Java繼承方法重寫(xiě)實(shí)現(xiàn)原理及解析

    這篇文章主要介紹了Java繼承方法重寫(xiě)實(shí)現(xiàn)原理及解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • java學(xué)習(xí)之路_篇超好的文章

    java學(xué)習(xí)之路_篇超好的文章

    一篇超好的文章!就看你有沒(méi)耐心看!java學(xué)習(xí)之路!
    2008-10-10

最新評(píng)論

金门县| 长岛县| 星子县| 呼伦贝尔市| 卓尼县| 永州市| 娄烦县| 台安县| 嵊州市| 邮箱| 闵行区| 渝中区| 勃利县| 南漳县| 渭南市| 龙山县| 侯马市| 永登县| 万源市| 太和县| 潞城市| 任丘市| 江山市| 马山县| 芒康县| 鹤壁市| 铁岭县| 蒙城县| 砀山县| 浮梁县| 洞头县| 上犹县| 庆城县| 建瓯市| 惠东县| 田阳县| 井研县| 建昌县| 富裕县| 张家口市| 正镶白旗|