3 回答

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
Spring 5提供了Bean注冊(cè),可以動(dòng)態(tài)完成。
Supplier<SSLContext>?sslcontextSupplier?=?()?->?getSSLContext(); context.registerBean("sslcontext",SSLContext.class,sslcontextSupplier);

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以使用 ConfigurableBeanFactory 在運(yùn)行時(shí)手動(dòng)注冊(cè) 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;
? ? }
}
但請(qǐng)記?。罕仨毸⑿履纳舷挛?,使其他 bean 能夠自動(dòng)注入您的新 bean,否則它們必須從應(yīng)用程序上下文動(dòng)態(tài)訪問(wèn)它們。

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
這是演示。
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());
}
}
您可以將寄存器部分移動(dòng)到您的方法中(從 開始BeanDefinitionBuilder)。我想這會(huì)滿足你的需求。
添加回答
舉報(bào)