Spring中的ApplicationContextAware介面的使用
阿新 • • 發佈:2019-02-11
最近在看專案程式碼時發現一個類在專案各個地方都能進行呼叫,仔細研究後發現這個類實現了ApplicationContextAware這個介面,這個介面可以很方便的獲取到Spring的上下文applicationContext。現在就跟我來一起看看如何使用吧。
使用方法
我們先新建一個測試類AppCache,在這個類中我定義了一個靜態的DictService屬性。而DictService類我也提前寫好了,裡面只輸出了一句話用作測試。
/**
* <pre>
* Description: 測試ApplicationContextAware介面
* Copyright: Copyright (c)2017
* Author: lllx
* Version: 1.0
* </pre>
*/
@Service
public class DictServiceImpl implements DictService {
@Override
public void sayHello() {
System.out.println("Hello ApplicationContextAware");
}
}
使用測試類AppCache實現這個介面,填寫它的setApplicationContext方法。Spring容器在載入的時候會呼叫一次setApplicationContext,並將上下文ApplicationContext傳遞給這個方法。我們拿到上下文後就可以做很多事情了。這裡我使用它來獲取了DictService這個bean。然後建立了一個靜態的sayHello測試方法呼叫了DictService中的sayHello。
/**
* <pre>
* Description: 測試ApplicationContextAware介面
* Copyright: Copyright (c)2017
* Author: lllx
* Version: 1.0
* </pre>
*/
public class AppCache implements ApplicationContextAware {
private static DictService dictService;
@Override
public void setApplicationContext (ApplicationContext applicationContext) throws BeansException {
dictService = applicationContext.getBean(DictService.class);
}
public static void sayHello(){
dictService.sayHello();
}
}
接下來我們需要把測試類AppCache注入到Spring容器中,在Spring的配置檔案中新增測試類的bean。
<!--繼承ApplicationContextAware介面的類-->
<bean id="appController" class="top.catalinali.controller.AppCache"/>
我們新建一個Junit測試類,來呼叫自己定義的AppCache中的方法sayHello。
/**
* <pre>
* Description: 測試ApplicationContextAware介面
* Copyright: Copyright (c)2017
* Author: lllx
* Version: 1.0
* </pre>
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class AppTest {
@Test
public void TestApp(){
AppCache.sayHello();
}
}
測試結果
可以看到我們成功輸出了Hello ApplicationContextAware這句話。用這樣的方法,我們就可以在專案的各個位置來呼叫AppCache中的方法。除此之外我們也可以使用上下文進行一些別的事情,大家就可以自由發揮啦!
結語
其實我們進入ApplicationContextAware介面內部可以看到他只有一個抽象的setApplicationContext方法,
public interface ApplicationContextAware extends Aware {
void setApplicationContext(ApplicationContext var1) throws BeansException;
}
並且他又繼承了一個Aware介面。而且這個介面是空的
package org.springframework.beans.factory;
public interface Aware {
}