首頁 > 軟體

Spring ApplicationContext介面功能詳細介紹

2023-11-01 18:00:33

第一步,我們先來看這個介面的內部結構,瞭解別人的內部,知己知彼,百戰不殆:

這個介面的擴充套件功能主要體現在它繼承的四個介面上:

  • MessageSource:國際化功能
  • ResourcePatternResolver: 資源存取功能
  • ApplicationEventPublisher: Spring事件釋出者功能
  • EnvironmentCapable:提供當前系統環境 Environment 元件功能

國際化功能演示

檢視對應的方法:

準備翻譯資源資訊:

--------messages_en.properties

hi=Hello

--------messages_ja.properties

hi=こんにちは

---------messages_zh.properties

hi=你好

使用context容器物件,通過getMessage方法。根據key進行翻譯:

   //處理國際化資源(國際化能力)
       //中文(引數:key,變化的資訊,翻譯的型別)
        //根據key找到不同語言的翻譯結果
        System.out.println(context.getMessage("hi", null, Locale.CHINA));
      //英文
        System.out.println(context.getMessage("hi", null, Locale.ENGLISH));
        //日文
        System.out.println(context.getMessage("hi", null, Locale.JAPANESE));

資源存取功能演示:

檢視對應的方法:

第一個是根據路徑獲取多個資源,第二個是根據路徑獲取單個資源

//根據磁碟的路徑獲取單個資源
context.getResources("classpath:spring.properties");
//獲取多個資源
  Resource[] resources = context.getResources("classpath*:META-INF/spring.factories");
        for (Resource resource : resources) {
            System.out.println(resource);
        }

提供當前系統環境 Environment 元件功能演示:

       System.out.println(context.getEnvironment().getProperty("java_home"));
        System.out.println(context.getEnvironment().getProperty("server.port"));

作用:獲取設定資訊

Spring事件釋出者功能演示:

定義事件:

//使用者已註冊事件
public class UserRegisteredEvent extends ApplicationEvent {
   // source 事件的事件源  
  public UserRegisteredEvent(Object source) {
        super(source);
    }
}

釋出事件:

context.publishEvent(new UserRegisteredEvent(context));

接收事件(監聽器):

@Component
public class Component2 {
    private static final Logger log = LoggerFactory.getLogger(Component2.class);
    @EventListener
//發的是什麼事件,就用什麼事件來接收
    public void aaa(UserRegisteredEvent event) {
        log.debug("{}", event);
        log.debug("傳送簡訊");
    }
}

實現使用者註冊與傳送簡訊之間的解耦:

@Component
public class Component1 {
    private static final Logger log = LoggerFactory.getLogger(Component1.class);
    @Autowired
    private ApplicationEventPublisher context;
    public void register() {
        log.debug("使用者註冊");
        context.publishEvent(new UserRegisteredEvent(this));
    }
}

測試:

context.getBean(Component1.class).register();

重點:釋出事件,使用監聽器來獲取事件,作用(實現元件之間的解耦)

總結:

  • BeanFactory 與 ApplicationContext 並不僅僅是簡單介面繼承的關係, ApplicationContext 組合並擴充套件了 BeanFactory 的功能
  • 又新學一種程式碼之間解耦途徑(釋出事件)

到此這篇關於Spring ApplicationContext介面功能詳細介紹的文章就介紹到這了,更多相關Spring ApplicationContext介面內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com