Aware 介面
阿新 • • 發佈:2020-08-03
Aware 介面,從字面上理解就是感知捕獲。單純的一個 Bean 是沒有知覺的。
之所以 UserDao 能夠注入到 UserService ,有一個前提,就是它兩個都是被 Spring
容器管理的。如果直接 new 一個 UserService,這是沒用的,因為 UserService 沒有被 Spring 容器管理,所以也不會給它裡邊注入Bean。
在實際開發中,我們可能會遇到一些類,需要獲取到容器的詳細資訊,那就可以通過 Aware 介面來實現。
Aware 是一個空介面,有很多實現類
這些實現的介面,有一些公共的特徵:
- 都是以Aware結尾
- 都是繼承Aware
- 介面內定義了一個set方法
每一個子介面均提供了一個 set 方法,方法的引數就是當前 Bean 需要感知的內容,因此我們需要在 Bean 中宣告相關的成員變數來接受這個引數。接收到這個引數後,就可以通過這個引數獲取到容器的詳細資訊了
@Component public class SayHello implements ApplicationContextAware { private ApplicationContext applicationContext; public String sayHello(String name) { //判斷容器中是否存在某個 Bean boolean userDao = applicationContext.containsBean("userDao333"); System.out.println(userDao); return "hello " + name; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } }