ApplicationContextAware是一個介面,它提供一個方法setApplicationContext,當spring註冊完成之後,會把ApplicationContext對象以參數的方式傳遞到方法里,在方法里我們可以實現自己的邏輯,去獲取自己的bean,當前對接的斷言等;一般用在被封裝 ...
- ApplicationContextAware是一個介面,它提供一個方法setApplicationContext,當spring註冊完成之後,會把ApplicationContext對象以參數的方式傳遞到方法里,在方法里我們可以實現自己的邏輯,去獲取自己的bean,當前對接的斷言等;一般用在被封裝的工具包,starter包中,方便給其它開發人員調用。
- @Autowired是直接給開發人員用的,直接註入對接類型的bean的,開箱即用,對應的註解還有@Qualifier,或者直接使用@Resource註解來實現按beanName的註入。
例子
LindContext
@Component
public class LindContext {
public void print(){
System.err.println("lind-context print.");
}
}
LindAware
public class LindAware implements ApplicationContextAware {
ApplicationContext applicationContext;
LindContext lindContext;
public void contextPrint() {
this.lindContext.print();
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
if (this.applicationContext.getBeansOfType(LindContext.class).isEmpty()) {
throw new IllegalArgumentException("未載入或者未發現LindContext的bean,請保證它可以正常載入到Spring容器.");
}
this.lindContext = this.applicationContext.getBean(LindContext.class);
}
}
LindConfig
@Configuration
public class LindConfig {
@Bean
public LindAware testAware() {
return new LindAware();
}
}
測試
@RunWith(SpringRunner.class)
@SpringBootTest()
public class TestAware {
@Autowired
LindAware lindAware;
@Test
public void print() {
lindAware.contextPrint();
}
}
當前如果沒有LindContext的bean被註冊時,會在LindAware中拋出對應的異常,來提示給開發人員
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!