国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

Spring容器擴展機制的實現原理

2024-07-14 08:42:59
字體:
來源:轉載
供稿:網友

IoC 容器負責管理容器中所有 bean 的生命周期, 而在 bean 生命周期的不同階段, Spring 提供了不同的擴展點來改變 bean 的命運. 在容器的啟動階段, BeanFactoryPostProcessor 允許我們在容器實例化相應對象之前, 對注冊到容器的 BeanDefinition 所保存的信息做一些額外的操作, 比如修改 bean 定義的某些屬性或者增加其他信息等.

BeanPostProcessor 接口

如果希望在Spring容器完成實例化、配置和初始化bean之后實現某些自定義邏輯, 則可以實現一個或多個 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;  }}

在 Bean 實例化之后會先執行 postProcessBeforeInitialization 方法, 再執行 Bean 的初始化方法, 然后在執行 postProcessAfterInitialization 方法.

Ordered 接口 @Order 注解

此接口只有一個方法 int getOrder(); 用來設置執行順序.

如果實現多個 BeanPostProcessor 接口, 我們就可以實現 Ordered 接口來設置執行順序.

@Componentpublic class Test implements BeanPostProcessor, Ordered {  @Override  public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {    return bean;  }  @Override  public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {    return bean;  }  @Override  public int getOrder() {    return 1;  }}

也可以使用 @Order 注解進行排序

@Configuration@Order(2)public class Demo1Config {  @Bean  public Demo1Service demo1Service(){    System.out.println("demo1config 加載了");    return new Demo1Service();  }}

BeanFactoryPostProcessor 接口

在容器實例化相應對象之前, 對注冊到容器的 BeanDefinition 所保存的信息做一些額外的操作可以實現此接口.

區別

  • BeanFactoryPostProcessor 會處理一些元數據.
  • BeanPostProcessor 會處理實例化后的對象.

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泽州县| 永平县| 宁都县| 临颍县| 哈尔滨市| 万宁市| 荣昌县| 湖南省| 龙口市| 鄢陵县| 汕尾市| 黑山县| 广汉市| 岗巴县| 伊川县| 襄垣县| 资兴市| 娱乐| 开封县| 紫阳县| 浦县| 德江县| 哈巴河县| 遵化市| 马关县| 陆河县| 嫩江县| 柯坪县| 应城市| 广水市| 乌拉特中旗| 大足县| 灌阳县| 张家口市| 长乐市| 上杭县| 杨浦区| 腾冲县| 榕江县| 德安县| 常熟市|