3 回答
TA贡献1942条经验 获得超3个赞
Spring 5提供了Bean注册,可以动态完成。
Supplier<SSLContext> sslcontextSupplier = () -> getSSLContext(); context.registerBean("sslcontext",SSLContext.class,sslcontextSupplier);
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,否则它们必须从应用程序上下文动态访问它们。
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)。我想这会满足你的需求。
添加回答
举报