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

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í),最直觀需要注冊(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)文章

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

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

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

    SpringBoot自動(dòng)配置之自定義starter的實(shí)現(xiàn)代碼

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

    Spring boot項(xiàng)目redisTemplate實(shí)現(xiàn)輕量級(jí)消息隊(duì)列的方法

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

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

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

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

    這篇文章主要介紹了Java線程創(chuàng)建(賣票),線程同步(賣包子)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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ù)庫(kù)里,在對(duì)象模型中就是一個(gè)或多個(gè)引用。下面這篇文章詳細(xì)的給大家介紹了Hibernate映射解析之關(guān)聯(lián)映射的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • JAVA實(shí)現(xiàn)生成順序ID,不浪費(fèi)ID

    JAVA實(shí)現(xiàn)生成順序ID,不浪費(fèi)ID

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

    詳解Spring?Bean的集合注入和自動(dòng)裝配

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

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

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

    SpringBoot項(xiàng)目整合mybatis的方法步驟與實(shí)例

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

最新評(píng)論