Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

ClassPathXmlApplicationContext的获得方式:ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext(“Beans.xml”);

重要的成员变量:

  • beanFactory: DefaultListableBeanFactory
  • beanFactoryPostProcessors: ArrayList
  • classLoader: [email protected]
  • configLocations: Beans.xml

Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

  • Logger: Jdk14Logger

Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

如何判断ClassPathXmlApplicationContext容器里是否包含某bean?

使用方法containsBean:

Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

delegate给getBeanFactory().containsBean方法:

Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

这个containsBean方法定义在AbstractApplicationContext里:

Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的
Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的
Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

而getBeanFactory的实现,位于AbstractRefreshableApplicationContext里:

Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

DefaultListableBeanFactory里有个成员变量beanDefinitionMap, 是一个ConcurrentHashMap:

Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

我在Beans.xml里定义的bean就存储在这个hashmap里,因此最后context.containsBean返回true:

Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的

要获取更多Jerry的原创文章,请关注公众号"汪子熙":
Java Spring ClassPathXmlApplicationContext是如何判断容器内包含某个Bean的