同学好,好问题,这个地方我的确也有困惑,这里需要同学协助一下,就是造类似如下的case,
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
Object d1 = context.getBean("d2");
/** 利用获取的d1进行业务操作*/
DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
factory.registerBeanDefinition("我要再注册一个bean",new GenericBeanDefinition());首先在application.xml里面定义一个叫做test的bean,然后再往factory.registerBeanDefinition("我要再注册一个bean",new GenericBeanDefinition());注册一个bean,名字同样为test,然后执行到这里的时候,肯定会进入到同学截图的if (hasBeanCreationStarted
)里面,提前设置断点看看执行到这里的时候,即 this.beanDefinitionNames = updatedDefinitions;,updatedDefinitions有没有重名的beanName。
此外,针对同学的第二个问题,removeManualSingletonName这个方法用来更新的是手工添加的bean的信息,如果发现自动注册进来的beanname和手工添加的重合了,就移除,你这里没有手工添加,所以就不需要移除了
https://www.cnblogs.com/hfultrastrong/p/9983409.html