请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答

1回答

同学好,好问题,这个地方我的确也有困惑,这里需要同学协助一下,就是造类似如下的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


0 回复 有任何疑惑可以回复我~
  • 提问者 绝世的陈逗逗 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-09-04 08:39:36
  • 没懂第一个问题的答案,"factory.registerBeanDefinition("我要再注册一个bean",new GenericBeanDefinition())"执行后就已经设置了Bean的名称了啊,如果设置为相同的"test",那么DefaultListableBeanFactory在执行"BeanDefinition existingDefinition= this.beanDefinitionMap.get(beanName)"的结果不为null,那么根本就不会执行到"if(hasBeanCreationStarted)"啊?所以该if语句下的两种名字注册方法不会重复注册啊。
    回复 有任何疑惑可以回复我~ 2021-06-22 20:23:58
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号