BeanFactory和ApplicationContext功能

IDEA中双击shift,搜索一切

  • BeanFactory和ApplicationContext功能_第1张图片

使用ctrl + f12打开当前文件的结构图,显示了当前文件的层次结构,包括类、方法、变量等。

  • BeanFactory和ApplicationContext功能_第2张图片

BeanFactory接口功能

  • 表面上只有getBean
  • 实际上IOC、DI、以及Bean的生命周期的各种功能,都有其实现类(DefaultListableBeanFactory)提供

ApplicationContext接口功能

BeanFactory和ApplicationContext功能_第3张图片

上述图中可以看出ApplicationContext接口相对于父接口BeanFactory接口多了一些功能

  • 国际化支持(MessageSource):ApplicationContext提供了国际化的支持,可以方便地进行多语言的处理。它可以根据不同的语言环境加载对应的资源文件,并根据需要进行国际化的文本翻译。

    •         ConfigurableApplicationContext context = SpringApplication.run(TliasApplication.class, args);
              System.out.println(context.getMessage("hi", null, Locale.CHINA));
              System.out.println(context.getMessage("hi", null, Locale.JAPAN));
              System.out.println(context.getMessage("hi", null, Locale.ENGLISH));
  • 事件发布与监听(ApplicationEventPublisher):ApplicationContext支持事件的发布与监听机制。它可以发布应用程序中的各种事件,同时也可以注册监听器来监听这些事件。这样可以实现应用程序中不同模块之间的解耦,通过事件的发布与监听来实现模块间的通信与交互。

    • 首先的定义一个事件继承父类

      • package com.example;
        
        import org.springframework.context.ApplicationEvent;
        
        public class UserRegisteredEvent extends ApplicationEvent {
        
            public UserRegisteredEvent(Object source) {
                super(source);
            }
        }
        
    • 发送事件

      • 
                ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
                context.publishEvent(new UserRegisteredEvent(context));
    • 接受事件

      • package com.example;
        
        import org.springframework.context.event.EventListener;
        
        public class Component01 {
            @EventListener
            public void Listener01(UserRegisteredEvent userRegisteredEvent) {
                System.out.println(userRegisteredEvent);
            }
        }
        
  • 资源加载(ResourceLoader):ApplicationContext可以加载多种类型的资源,如文件系统、类路径、URL等。它提供了方便的资源加载方法,可以加载配置文件、模板文件、图片等各种资源。

    • 
              ConfigurableApplicationContext context = SpringApplication.run(TliasApplication.class, args);
              Resource[] resources = (Resource[]) context.getResources("classpath*:META-INF/spring.factories");
              for (Resource resource : resources) {
                  System.out.println(resource);
              }

  • 获取配置信息(EnvironmentCapable)

    •    ConfigurableApplicationContext context = SpringApplication.run(TliasApplication.class, args);
              System.out.println(context.getEnvironment().getProperty("java_home"));

小结

  • BeanFactory和ApplicationContext并不是简单接口继承的关系,ApplicationContext组合扩展了BeanFactory的功能
  • ApplicationContext接口中的发送事件是一种新的代码之间解耦的方式。

你可能感兴趣的:(Spring,5,spring,后端)