ApplicationContextAware介面
- 一、ApplicationContextAware的作用
- 1、ApplicationContext是什么?
- 2、ApplicationContextAware作用
- 二、ApplicationContextAware如何使用
- 三、知識點拓展
一、ApplicationContextAware的作用
1、ApplicationContext是什么?
很多人都知道,ApplicationContext是我們常用的IOC容器,而他的頂層介面便是BeanFactory,ApplicationContext對BeanFactory做了拓展,功能更加強大,
2、ApplicationContextAware作用
在Spring/SpringMVC中,我們拿到IOC容器無非有三種方式,那就是使用ApplicationContext介面下的三個實作類:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext(我的思維導圖有對IOC核心容器的介紹:Spring知識點),
SpringMVC中還好,雖然可以自動初始化容器,但是我們依舊可以通過那三個實作類獲取ApplicationContext物件,但是在SpringBoot中,因為沒有了ioc組態檔,全都成自動化的了,我們無法通過上述方式拿到ApplicationContext物件,但有時候遇到的需求是必須要通過Spring容器才能實作的,例如動態獲取三方渠道的代理類,所以,簡單地說,ApplicationContextAware介面是用來獲取框架自動初始化的ioc容器物件的,
二、ApplicationContextAware如何使用
注解方式當下用的比較多,所以我就不提xml方式的了,寫個類實作ApplicationContextAware介面,實作方法,再提供幾個ioc容器常用方法,將這個類當工具類用,描述不如看代碼:
package com.wangxs.springcloud.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
@Slf4j
public class AppContextUtil implements ApplicationContextAware {
// 定義靜態ApplicationContext
private static ApplicationContext applicationContext = null;
/**
* 重寫介面的方法,該方法的引數為框架自動加載的IOC容器物件
* 該方法在啟動專案的時候會自動執行,前提是該類上有IOC相關注解,例如@Component
* @param applicationContext ioc容器
* @throws BeansException e
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
// 將框架加載的ioc賦值給全域靜態ioc
AppContextUtil.applicationContext = applicationContext;
log.info("==================ApplicationContext加載成功==================");
}
// 獲取applicationContext
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
// 通過name獲取 Bean.
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
// 通過class獲取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
// 通過name,以及Clazz回傳指定的Bean
public static <T> T getBean(String name, Class<T> clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
三、知識點拓展
Spring中ioc容器是在我們通過上述三個類拿到ApplicationContext物件時進行初始化的,屬于手動初始化,而在SpringMvc中,我們不再需要手動初始化,專案啟動即加載了IOC容器,本質上是利用了JavaWeb的監聽技術,ServletContextListener是對JavaWeb域物件ServletContext的監聽,而ServletContext物件整個服務器僅一份且在服務器啟動便加載,而SpringMvc也設定了監聽ContextLoaderListener,這個類實作了ServletContextListener介面,如此一來,SpringMvc便能感知到ServletContext物件要創建了,服務器要啟動了,此時該加載IOC容器了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/224254.html
標籤:java
上一篇:網路通信,UDP.TCP協議
