成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

denson / 2930人閱讀

摘要:之動態(tài)注冊什么場景下,需要主動向容器注冊呢如我之前做個的一個支持掃表的基礎(chǔ)平臺,使用者只需要添加基礎(chǔ)配置任務(wù),就可以丟到這個平臺上面來運(yùn)行了,而這個基礎(chǔ)平臺是一直都在運(yùn)行的,所以在新來任務(wù)時,最直觀需要注冊的就是數(shù)據(jù)源這個了,那么可以怎么玩

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

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

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

I. 主動注冊Bean支持

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

public  T registerBean(String name, Class 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 registerBean(String name, Class 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);
    }
}

輸出如下

II. 其他 1. 一灰灰Blog: https://liuyueyi.github.io/he...

一灰灰的個人博客,記錄所有學(xué)習(xí)和工作中的博文,歡迎大家前去逛逛

2. 聲明

盡信書則不如,已上內(nèi)容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發(fā)現(xiàn)bug或者有更好的建議,歡迎批評指正,不吝感激

微博地址: 小灰灰Blog

QQ: 一灰灰/3302797840

3. 掃描關(guān)注

小灰灰Blog&公眾號

知識星球

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76619.html

相關(guān)文章

  • 仿照 Spring 實(shí)現(xiàn)簡單的 IOC 和 AOP - 下篇

    摘要:在上文中,我實(shí)現(xiàn)了一個很簡單的和容器。比如,我們所熟悉的就是在這里將切面邏輯織入相關(guān)中的。初始化的工作算是結(jié)束了,此時處于就緒狀態(tài),等待外部程序的調(diào)用。其中動態(tài)代理只能代理實(shí)現(xiàn)了接口的對象,而動態(tài)代理則無此限制。 1. 背景 本文承接上文,來繼續(xù)說說 IOC 和 AOP 的仿寫。在上文中,我實(shí)現(xiàn)了一個很簡單的 IOC 和 AOP 容器。上文實(shí)現(xiàn)的 IOC 和 AOP 功能很單一,且 I...

    AlexTuan 評論0 收藏0
  • Dubbo 新編程模型外部化配置

    摘要:同時,所標(biāo)注的需要被應(yīng)用上下文注冊配置引導(dǎo)類創(chuàng)建配置上下文注冊當(dāng)前配置獲取和獲取獲取運(yùn)行結(jié)果運(yùn)行后控制臺輸出輸出的內(nèi)容與綁定的內(nèi)容一致,符合期望。 Dubbo 外部化配置(Externalized Configuration) 原文地址 外部化配置(Externalized Configuration) 在Dubbo 注解驅(qū)動例子中,無論是服務(wù)提供方,還是服務(wù)消費(fèi)方,均需要轉(zhuǎn)配相關(guān)配置...

    baihe 評論0 收藏0
  • 3分鐘干貨spring進(jìn)行定制化功能擴(kuò)展

    摘要:與的區(qū)別是處理的對象不同,是對進(jìn)行處理,是對進(jìn)行處理??梢栽诔跏蓟瓿桑袑傩栽O(shè)置完成后執(zhí)行特定邏輯,例如對自動裝配對屬性進(jìn)行驗(yàn)證等等。用于在被銷毀前執(zhí)行特定的邏輯,例如做一些回收工作等。用來監(jiān)聽的標(biāo)準(zhǔn)應(yīng)用事件或者自定義事件。 可以選擇如下一些擴(kuò)展點(diǎn): ▌1.BeanFactoryPostProcessor是beanFactory后置處理器,支持在bean factory標(biāo)準(zhǔn)初始化完...

    changfeng1050 評論0 收藏0
  • 面試官:“談?wù)?em>Spring中都用到了那些設(shè)計(jì)模式?”。

    摘要:會一直完善下去,歡迎建議和指導(dǎo),同時也歡迎中用到了那些設(shè)計(jì)模式中用到了那些設(shè)計(jì)模式這兩個問題,在面試中比較常見。工廠設(shè)計(jì)模式使用工廠模式可以通過或創(chuàng)建對象。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識點(diǎn)以及面試問題,已經(jīng)開源,目前已經(jīng) 41k+ Star。會一直完善下去,歡迎建議和指導(dǎo),同時也歡迎Star: https://github.com/Snailclimb... JDK 中用到了那...

    Astrian 評論0 收藏0
  • 仿照 Spring 實(shí)現(xiàn)簡單的 IOC 和 AOP - 上篇

    摘要:不過那個實(shí)現(xiàn)太過于簡單,和,相去甚遠(yuǎn)。在接下來文章中,我也將從易到難,實(shí)現(xiàn)不同版本的和。切面切面包含了通知和切點(diǎn),通知和切點(diǎn)共同定義了切面是什么,在何時,何處執(zhí)行切面邏輯。 1. 背景 我在大四實(shí)習(xí)的時候開始接觸 J2EE 方面的開發(fā)工作,也是在同時期接觸并學(xué)習(xí) Spring 框架,到現(xiàn)在也有快有兩年的時間了。不過之前沒有仿寫過 Spring IOC 和 AOP,只是宏觀上對 Spri...

    layman 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<