- 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
支付寶掃一掃,為大叔打賞!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/506005.html
標籤:其他
上一篇:原云生實戰
下一篇:java 獲取類路徑下的資源檔案
