spring:beanfactory与applicationcontext的设计

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后置处理器的支持、 消息转换服务(国际化)、事件发布机制(事件驱动)

posted @ 2022-10-04 15:16  无极是一种信仰  阅读(31)  评论(0)    收藏  举报