欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Spring動態(tài)修改bean屬性的key

 更新時間:2024年05月16日 09:16:10   作者:影??  
這篇文章主要介紹了使用Spring動態(tài)修改bean屬性的key方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

Spring動態(tài)修改bean屬性的key

  • BeanDefinitionRegistryPostProcessor - 動態(tài)注冊bean定義
  • BeanFactoryPostProcessor - 動態(tài)修改bean定義
  • BeanPostProcessor - 動態(tài)修改bean,即在bean初始化前后做些特殊操作

BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor以及BeanPostProcessor都屬于Spring的后置處理器,可以實現(xiàn)它們以達到動態(tài)注冊bean定義,動態(tài)修改bean定義,以及動態(tài)修改bean。

1、BeanDefinitionRegistryPostProcessor

繼承接口BeanFactoryPostProcessor,該接口新增postProcessBeanDefinitionRegistry方法,方法參數(shù)是BeanDefinitionRegistry對象,BeanDefinitionRegistry對象是bean定義的保存中心。

2、BeanFactoryPostProcessor是一個接口

它允許自定義修改應用程序上下文的bean定義,在基于bean factory上調(diào)整上下文的bean屬性值。

BeanFactoryPostProcessor可以與bean交互并修改bean定義,但從不使用bean實例。

實現(xiàn)該接口,可以在spring的bean創(chuàng)建之前,修改bean的定義屬性。

也就是說,Spring允許BeanFactoryPostProcessor在容器實例化任何其它bean之前讀取配置元數(shù)據(jù),并可以根據(jù)需要進行修改,例如可以把bean的scope從singleton改為prototype,也可以把property的值給修改掉。

可以同時配置多個BeanFactoryPostProcessor,并通過設置’order’屬性來控制各個BeanFactoryPostProcessor的執(zhí)行次序。

這里我們想動態(tài)修改bean屬性的key,也就是希望修改bean的定義。

所以使用BeanFactoryPostProcessor即可。

  • 在application context執(zhí)行完標準初始化之后,所有bean definition都已加載,但還沒有實例化任何bean。
  • BeanFactoryPostProcessor允許插手修改context內(nèi)部bean工廠,允許覆蓋或添加屬性

3、BeanPostProcessor也是一個接口

它允許動態(tài)修改應用程序上下文的bean,這時候bean已經(jīng)實例化成功。

BeanPostProcessor,該接口我們也叫后置處理器,作用是在bean對象的實例化和依賴注入完畢后,在顯示調(diào)用初始化方法的前后添加我們的邏輯。

這里需要注意的是Bean實例化完畢以及依賴注入完成后觸發(fā)的

package com.dpb.processor;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
 * 自定義BeanPostProcessor實現(xiàn)類
 * BeanPostProcessor接口的作用是:
 * 	 我們可以通過該接口中的方法在bean實例化、配置以及其他初始化方法前后添加一些我們自己的邏輯
 * @author dengp
 *
 */
public class MyBeanPostProcessor implements BeanPostProcessor{

	/**
	 * 實例化、依賴注入完畢,在調(diào)用顯示的初始化之前完成一些定制的初始化任務
	 * 注意:方法返回值不能為null
	 * 如果返回null那么在后續(xù)初始化方法將報空指針異常或者通過getBean()方法獲取不到bena實例對象
	 * 因為后置處理器從Spring IoC容器中取出bean實例對象沒有再次放回IoC容器中
	 */
	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		System.out.println("初始化 before--實例化的bean對象:"+bean+"\t"+beanName);
		// 可以根據(jù)beanName不同執(zhí)行不同的處理操作
		return bean;
	}

	/**
	 * 實例化、依賴注入、初始化完畢時執(zhí)行 
	 * 注意:方法返回值不能為null
	 * 如果返回null那么在后續(xù)初始化方法將報空指針異?;蛘咄ㄟ^getBean()方法獲取不到bena實例對象
	 * 因為后置處理器從Spring IoC容器中取出bean實例對象沒有再次放回IoC容器中
	 */
	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		System.out.println("初始化 after...實例化的bean對象:"+bean+"\t"+beanName);
		// 可以根據(jù)beanName不同執(zhí)行不同的處理操作
		return bean;
	}

}

三者執(zhí)行順序

BeanDefinitionRegistryPostProcessor優(yōu)先于BeanFactoryPostProcessor執(zhí)行,BeanFactoryPostProcessor優(yōu)先于BeanPostProcessor執(zhí)行。

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用

    詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用

    這篇文章主要介紹了詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用,非常具有實用價值,需要的朋友可以參考下
    2017-05-05
  • 使用java的注解(用在java類的方法上的注解)方法

    使用java的注解(用在java類的方法上的注解)方法

    這篇文章主要介紹了使用java的注解(用在java類的方法上的注解)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Java中MapStruct對象映射的實現(xiàn)

    Java中MapStruct對象映射的實現(xiàn)

    MapStruct是一種Java實體類映射框架,本文就來介紹一下Java中MapStruct對象映射的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-12-12
  • 詳解JAVA 字節(jié)流和字符流

    詳解JAVA 字節(jié)流和字符流

    這篇文章主要介紹了JAVA 字節(jié)流和字符流的的相關資料,文中講解非常的細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • Springmvc調(diào)用存儲過程,并返回存儲過程返還的數(shù)據(jù)方式

    Springmvc調(diào)用存儲過程,并返回存儲過程返還的數(shù)據(jù)方式

    這篇文章主要介紹了Springmvc調(diào)用存儲過程,并返回存儲過程返還的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Intellij IDEA菜單欄不見了(Main Menu as Separate Toolbar)恢復菜單欄顯示的解決辦法

    Intellij IDEA菜單欄不見了(Main Menu as Separat

    有人問博主,關于Intellij IDEA菜單欄找不到了,被不小心的操作給隱藏了,怎么辦?下面給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • yaml文件中${}語法取值方式

    yaml文件中${}語法取值方式

    在Spring Boot中,配置文件中的${test.aa}等占位符的值可以通過系統(tǒng)屬性或依賴的其他模塊來獲取,這意味著,可以通過JVM參數(shù)或者系統(tǒng)屬性來指定這些值,例如,通過在啟動命令中添加-Dtest.aa=your_value或在代碼中通過
    2024-10-10
  • Spring AI與DeepSeek實戰(zhàn)一之快速打造智能對話應用

    Spring AI與DeepSeek實戰(zhàn)一之快速打造智能對話應用

    本文詳細介紹了如何通過SpringAI框架集成DeepSeek大模型,實現(xiàn)普通對話和流式對話功能,步驟包括申請API-KEY、項目搭建、配置API-KEY、創(chuàng)建ChatClient對象、創(chuàng)建對話接口、切換模型、使用prompt模板、流式對話等,感興趣的朋友一起看看吧
    2025-03-03
  • 完美解決Spring Boot前端的Access-Control-Allow-Origin跨域問題

    完美解決Spring Boot前端的Access-Control-Allow-Origin跨域問題

    這篇文章主要介紹了完美解決Spring Boot前端的Access-Control-Allow-Origin跨域問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • Spark使用IDEA編寫wordcount的示例演示

    Spark使用IDEA編寫wordcount的示例演示

    這篇文章主要介紹了Spark使用IDEA編寫wordcount的示例演示,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07

最新評論