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

Spring之動(dòng)態(tài)注冊(cè)bean的實(shí)現(xiàn)方法

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

Spring之動(dòng)態(tài)注冊(cè)bean

什么場(chǎng)景下,需要主動(dòng)向Spring容器注冊(cè)bean呢?

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

I. 主動(dòng)注冊(cè)Bean支持

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

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);
}

測(cè)試如下

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);
  }
}

輸出如下

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

相關(guān)文章

  • 如何使用intellij IDEA搭建Spring Boot項(xiàng)目

    如何使用intellij IDEA搭建Spring Boot項(xiàng)目

    這篇文章主要介紹了如何使用intellij IDEA搭建Spring Boot項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • java調(diào)用ffmpeg實(shí)現(xiàn)轉(zhuǎn)換視頻

    java調(diào)用ffmpeg實(shí)現(xiàn)轉(zhuǎn)換視頻

    這篇文章主要為大家詳細(xì)介紹了java調(diào)用ffmpeg實(shí)現(xiàn)轉(zhuǎn)換視頻功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java靈活使用枚舉表示一組字符串的操作

    Java靈活使用枚舉表示一組字符串的操作

    這篇文章主要介紹了Java靈活使用枚舉表示一組字符串的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • JAVA核心知識(shí)之ConcurrentHashMap源碼分析

    JAVA核心知識(shí)之ConcurrentHashMap源碼分析

    這篇文章主要介紹了JAVA核心知識(shí)之ConcurrentHashMap源碼分析,想了解ConcurrentHashMap的同學(xué)一定要看啊
    2021-04-04
  • SpringBoot生成二維碼的實(shí)現(xiàn)

    SpringBoot生成二維碼的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot生成二維碼的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • springBoot如何動(dòng)態(tài)加載資源文件

    springBoot如何動(dòng)態(tài)加載資源文件

    這篇文章主要介紹了springBoot如何動(dòng)態(tài)加載資源文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 帶你了解Java中Static關(guān)鍵字的用法

    帶你了解Java中Static關(guān)鍵字的用法

    這篇文章主要介紹了JAVA Static關(guān)鍵字的用法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下,希望能給你帶來(lái)幫助
    2021-08-08
  • Java不可不知的泛型使用示例代碼

    Java不可不知的泛型使用示例代碼

    這篇文章主要介紹了Java不可不知的泛型使用,本文通過(guò)實(shí)例代碼給大家介紹了java的泛型的基本使用,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Java concurrency之AtomicLong原子類(lèi)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency之AtomicLong原子類(lèi)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    AtomicLong是作用是對(duì)長(zhǎng)整形進(jìn)行原子操作。下面通過(guò)本文給大家介紹Java concurrency之AtomicLong原子類(lèi)的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2017-06-06
  • Java中如何判斷中文字符串長(zhǎng)度

    Java中如何判斷中文字符串長(zhǎng)度

    這篇文章主要介紹了Java中如何判斷中文字符串長(zhǎng)度問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評(píng)論

论坛| 吉首市| 五常市| 亚东县| 临潭县| 辰溪县| 新邵县| 台中县| 阿鲁科尔沁旗| 贺兰县| 衢州市| 武平县| 丹阳市| 汕尾市| 旬邑县| 剑阁县| 贞丰县| 安阳市| 获嘉县| 防城港市| 屯昌县| 华安县| 洪泽县| 镇原县| 沙田区| 临潭县| 博白县| 靖西县| 土默特右旗| 临安市| 香格里拉县| 乡宁县| 花垣县| 邮箱| 万载县| 政和县| 扶绥县| 绥芬河市| 呼图壁县| 行唐县| 博爱县|