亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring之動態(tài)注冊bean的實現(xiàn)方法

 更新時間:2018年08月06日 10:46:57   作者:小灰灰Blog  
這篇文章主要介紹了Spring之動態(tài)注冊bean的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

Spring之動態(tài)注冊bean

什么場景下,需要主動向Spring容器注冊bean呢?

如我之前做個的一個支持掃表的基礎(chǔ)平臺,使用者只需要添加基礎(chǔ)配置 + Groovy任務(wù),就可以丟到這個平臺上面來運行了,而這個基礎(chǔ)平臺是一直都在運行的,所以在新來任務(wù)時,最直觀需要注冊的就是 DataSource 數(shù)據(jù)源這個bean了,那么可以怎么玩?

I. 主動注冊Bean支持

借助BeanDefinition來實現(xiàn)bean的定義,從最終的使用來看,代碼比較少,幾行而已

public <T> T registerBean(String name, Class<T> clazz, Object... args) {
   BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
   if (args.length > 0) {
     for (Object arg : args) {
       beanDefinitionBuilder.addConstructorArgValue(arg);
     }
   }
   BeanDefinition beanDefinition = beanDefinitionBuilder.getRawBeanDefinition();
 
   BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) applicationContext.getBeanFactory();
   beanFactory.registerBeanDefinition(name, beanDefinition);
   return applicationContext.getBean(name, clazz);
}

測試如下

import com.github.hui.story.quickstory.server.VisitService;
import lombok.ToString;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;

@Component
public class BeanHolder {
  private final ConfigurableApplicationContext applicationContext;

  public BeanHolder(ConfigurableApplicationContext applicationContext) {
    this.applicationContext = applicationContext;
    initSer();
  }

  public void initSer() {
    InrSer ser = registerBean("test", InrSer.class);
    ser.name = "一灰";
    ser.uid = 22;
    System.out.println(ser);

    InrSer ser2 = registerBean("test2", InrSer.class, "一灰灰Blog", 20);
    System.out.println(ser2);
  }

  @ToString
  public static class InrSer {
    private String name;
    private Integer uid;

    @Autowired
    private VisitService visitService;

    public InrSer() {
    }

    public InrSer(String name, Integer uid) {
      this.name = name;
      this.uid = uid;
    }
  }

  private <T> T registerBean(String name, Class<T> clazz, Object... args) {
    BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz);
    if (args.length > 0) {
      for (Object arg : args) {
        beanDefinitionBuilder.addConstructorArgValue(arg);
      }
    }
    BeanDefinition beanDefinition = beanDefinitionBuilder.getRawBeanDefinition();

    BeanDefinitionRegistry beanFactory = (BeanDefinitionRegistry) applicationContext.getBeanFactory();
    beanFactory.registerBeanDefinition(name, beanDefinition);
    return applicationContext.getBean(name, clazz);
  }
}

輸出如下

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中File類的構(gòu)造函數(shù)及其方法

    java中File類的構(gòu)造函數(shù)及其方法

    這篇文章主要介紹了java中File類的構(gòu)造函數(shù)及其方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • SpringBoot自動配置之自定義starter的實現(xiàn)代碼

    SpringBoot自動配置之自定義starter的實現(xiàn)代碼

    這篇文章主要介紹了SpringBoot自動配置之自定義starter的實現(xiàn)代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Spring boot項目redisTemplate實現(xiàn)輕量級消息隊列的方法

    Spring boot項目redisTemplate實現(xiàn)輕量級消息隊列的方法

    這篇文章主要給大家介紹了關(guān)于Spring boot項目redisTemplate實現(xiàn)輕量級消息隊列的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 九個動畫組圖輪播總結(jié)全棧數(shù)據(jù)結(jié)構(gòu)數(shù)組鏈表

    九個動畫組圖輪播總結(jié)全棧數(shù)據(jù)結(jié)構(gòu)數(shù)組鏈表

    數(shù)據(jù)結(jié)構(gòu)和算法是密不可分的,兩者往往是相輔相成的存在,所以在學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)過程中,不免會遇到各種算法,數(shù)據(jù)結(jié)構(gòu)常用操作一般為:增刪改查?;旧纤械臄?shù)據(jù)結(jié)構(gòu)都是圍繞這幾個操作進行展開,本文用九張動圖來闡述先進后出的數(shù)據(jù)結(jié)構(gòu)
    2021-08-08
  • Java線程創(chuàng)建(賣票),線程同步(賣包子)的實現(xiàn)示例

    Java線程創(chuàng)建(賣票),線程同步(賣包子)的實現(xiàn)示例

    這篇文章主要介紹了Java線程創(chuàng)建(賣票),線程同步(賣包子)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Hibernate映射解析之關(guān)聯(lián)映射詳解

    Hibernate映射解析之關(guān)聯(lián)映射詳解

    所謂關(guān)聯(lián)映射就是將關(guān)聯(lián)關(guān)系映射到數(shù)據(jù)庫里,在對象模型中就是一個或多個引用。下面這篇文章詳細的給大家介紹了Hibernate映射解析之關(guān)聯(lián)映射的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • JAVA實現(xiàn)生成順序ID,不浪費ID

    JAVA實現(xiàn)生成順序ID,不浪費ID

    這篇文章主要介紹了JAVA實現(xiàn)生成順序ID,不浪費ID問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • 詳解Spring?Bean的集合注入和自動裝配

    詳解Spring?Bean的集合注入和自動裝配

    這篇文章主要為大家詳細介紹了Spring?Bean中集合注入和自動裝配的方法,文中的示例代碼講解詳細,對我們學(xué)習(xí)有一定的幫助,需要的可以參考一下
    2022-06-06
  • 關(guān)于JVM垃圾回收的java.lang.ref.Finalizer問題

    關(guān)于JVM垃圾回收的java.lang.ref.Finalizer問題

    這篇文章主要介紹了關(guān)于JVM垃圾回收的java.lang.ref.Finalizer問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • SpringBoot項目整合mybatis的方法步驟與實例

    SpringBoot項目整合mybatis的方法步驟與實例

    今天小編就為大家分享一篇關(guān)于SpringBoot項目整合mybatis的方法步驟與實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論