我需要通过webservice在运行时修改一些spring bean。我正在使用ApplicationContext。
ConfigurableApplicationContext configContext = (ConfigurableApplicationContext)applicationContext;
ConfigurableListableBeanFactory registery = configContext.getBeanFactory();
registery.registerSingleton("XXX", new MyNewBeanDefintion());
在我的@Configuration类中有
@Bean
public ParentClass campaignSelection(){
if(type.equals("X")) {
return new X();
}
else if(type.equals("Y")){
return new Y();
}
return null;
}
只需
public interface ParentClass {
public Item selectOneItem();
}
public class X implements ParentClass {
@Override
public Item selectOneItem() {
// return item
}
}
public class Y implements ParentClass {
@Override
public Item selectOneItem() {
// return item
}
}
我需要bean在运行时间在X,Y之间切换
答案 0 :(得分:1)
要替换注入的campaignSelection
bean实例,您可以使用标记接口,例如
public interface CampaignChangeAware {
void onCampaignChange(ParentClass newCampaign);
}
使其他必须更新的类实现此接口。然后,您将能够使用代码
更新beanMap<String, CampaignChangeAware> beansToUpdate = context.getBeansOfType(CampaignChangeAware.class);
for (CampaignChangeAware bean : beansToUpdate.values()) {
bean.onCampaignChange(newCampaign);
}
但它不影响已经实例化的bean,其范围是singleton
,因为spring不管理这样的bean。