亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Spring Boot 中動態注冊 bean?

如何在 Spring Boot 中動態注冊 bean?

LEATH 2023-04-13 14:53:33
我希望在運行時覆蓋 Spring 的 SSLContext。因此,我試圖找到將以下方法動態注冊為 bean 的方法。對于前。調用 GetMapping 端點時,應將以下方法作為 bean 注入到 Spring IoC 中。public static SSLContext getSSLContext() throws Exception {    TrustManager[] trustManagers = new TrustManager[] {            new ReloadableX509TrustManager(truststoreNewPath)    };    SSLContext sslContext = SSLContext.getInstance("SSL");    sslContext.init(null, trustManagers, null);    return sslContext;}我怎樣才能做到這一點?
查看完整描述

3 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

Spring 5提供了Bean注冊,可以動態完成。

Supplier<SSLContext>?sslcontextSupplier?=?()?->?getSSLContext();
context.registerBean("sslcontext",SSLContext.class,sslcontextSupplier);


查看完整回答
反對 回復 2023-04-13
?
SMILET

TA貢獻1796條經驗 獲得超4個贊

您可以使用 ConfigurableBeanFactory 在運行時手動注冊 bean。


@Service

public class RegisterBeansDynamically implements BeanFactoryAware {


? ? private ConfigurableBeanFactory beanFactory;


? ? public <T> void registerBean(String beanName, T bean) {

? ? ? ? beanFactory.registerSingleton(beanName, bean);

? ? }


? ? @Override

? ? public void setBeanFactory(BeanFactory beanFactory) throws BeansException {

? ? ? ? this.beanFactory = (ConfigurableBeanFactory) beanFactory;

? ? }

}

但請記?。罕仨毸⑿履纳舷挛?,使其他 bean 能夠自動注入您的新 bean,否則它們必須從應用程序上下文動態訪問它們。



查看完整回答
反對 回復 2023-04-13
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

這是演示。


public class Demo implements ApplicationContextAware {


    private ApplicationContext applicationContext;


    @Override

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

        this.applicationContext = applicationContext;

        ConfigurableApplicationContext context = (ConfigurableApplicationContext)applicationContext;

        DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)context.getBeanFactory();


        BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.rootBeanDefinition(YourClass.class);


        beanDefinitionBuilder.addPropertyValue("property1", "propertyValue");

        beanDefinitionBuilder.addPropertyValue("property2", applicationContext.getBean(AnotherClass.class));



        beanFactory.registerBeanDefinition("yourBeanName", beanDefinitionBuilder.getBeanDefinition());



    }

}

您可以將寄存器部分移動到您的方法中(從 開始BeanDefinitionBuilder)。我想這會滿足你的需求。


查看完整回答
反對 回復 2023-04-13
  • 3 回答
  • 0 關注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號