beanfactory接口提供的方法:getBean,getBeanProvider,containsBean,isSingleton,getType,getAliases
listableBeanFactory: 不会取到手动注册的bean,为什么要这么做呢,因为有些bean属于 SpringFramework 内部使用的,这样做的目的是 SpringFramework 不希望咱开发者直接操控他们,于是就使用了这种方式来隐藏它们。
此外:除了 getBeanDefinitionCount 和 containsBeanDefinition 之外,此接口中的方法不适用于频繁调用,方法的实现可能执行速度会很慢。
public class ListableBeanFactoryApplication {
public static void main(String[] args) throws Exception {
ClassPathResource resource = new ClassPathResource("container/listable-container.xml");
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
XmlBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);
beanDefinitionReader.loadBeanDefinitions(resource);
// 直接打印容器中的所有Bean
System.out.println("加载xml文件后容器中的Bean:");
Stream.of(beanFactory.getBeanDefinitionNames()).forEach(System.out::println);
System.out.println();
// 手动注册一个单实例Bean
beanFactory.registerSingleton("doggg", new Dog());
// 再打印容器中的所有Bean
System.out.println("手动注册单实例Bean后容器中的所有Bean:");
Stream.of(beanFactory.getBeanDefinitionNames()).forEach(System.out::println);
}
}
applicationContext:在BeanFactory基础上扩展了生命周期管理、Bean后置处理器的支持、BeanFactory后置处理器的支持、 消息转换服务(国际化)、事件发布机制(事件驱动)