關(guān)于Springboot如何獲取IOC容器
Springboot項目中獲取IOC容器的方式
在Springboot項目中如果要獲取IOC容器目前有兩種方法。
方法一(不實用,不推薦):
在Springboot項目中都會存在一個SpringApplication的啟動類,我們通過以下代碼啟動IOC容器。
SpringApplication.run(Application.class, args);
其實run方法會將創(chuàng)建的IOC容器作為返回值返回,那么我們就可以通過聲明一個ApplicationContext對象來接收run方法的返回值。
public class SpringApplication {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(Application.class, args);
Object startSerive = applicationContext.getBean("startSerive");
}
}
但是,使用這種方法會遇到各種各樣的問題,所以我們通常使用第二種方法。
方法二(強烈推薦):
通過編寫實現(xiàn)了ApplicationContextAware的工具類來獲取IOC容器,當(dāng)實現(xiàn)了ApplicationContextAware的類在容器中被初始化和加載后,會自動調(diào)用ApplicationContextAware中的setApplicationContext方法,將IOC容器傳入setApplicationContext方法的形參中。
以下是用于獲取IOC容器的工具類:
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public SpringContextUtil() {
}
/**
* 設(shè)置上下文
* @param applicationContext
* @throws BeansException
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringContextUtil.applicationContext == null) {
SpringContextUtil.applicationContext = applicationContext;
}
}
/**
* 獲取上下文
* @return
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 通過名字獲取上下文中的bean
* @param name
* @return
*/
public static Object getBean(String name){
return applicationContext.getBean(name);
}
/**
* 通過類型獲取上下文中的bean
* @param requiredType
* @return
*/
public static Object getBean(Class<?> requiredType){
return applicationContext.getBean(requiredType);
}
}
上面這個工具類只有在被IOC容器加載完之后才會調(diào)用setApplicationContext,那么該怎么把工具類放到IOC容器中呢?我們使用@Import注解來實現(xiàn),具體使用方法請看下面代碼:
@SpringBootApplication
@Import({SpringContextUtil.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
注:不使用@Import也是可以的,例如在SpringContextUtil類上面標(biāo)注@Component等類似的注解也是可以的。
@Import注解須知:
1.@Import只能用在類上 ,@Import通過快速導(dǎo)入的方式實現(xiàn)把實例加入spring的IOC容器中
2.加入IOC容器的方式有很多種,@Import注解可以用于導(dǎo)入第三方包 ,當(dāng)然@Bean注解也可以,但是@Import注解快速導(dǎo)入的方式更加便捷
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java根據(jù)開始時間和結(jié)束時間及周幾計算日期的示例代碼
在Java 7中,java.time包不存在,所以我們需要使用java.util.Calendar和java.util.Date類來實現(xiàn)類似的功能,這篇文章主要介紹了Java根據(jù)開始時間和結(jié)束時間及周幾計算出日期的示例代碼,需要的朋友可以參考下2024-06-06
Apache DolphinScheduler實現(xiàn)自動化打包單機/集群部署詳解
這篇文章主要為大家介紹了Apache DolphinScheduler實現(xiàn)自動化打包單機/集群部署詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
IDEA java關(guān)閉某些代碼檢查提示W(wǎng)arning實現(xiàn)方式
文章內(nèi)容涉及編程中兩種常見警告:Methodisneverused(未使用方法)和Uncheckedcast(未檢查類型轉(zhuǎn)換),提示需檢查代碼邏輯及類型安全處理2025-09-09
java string類型轉(zhuǎn)換boolean類型的方法
下面小編就為大家?guī)硪黄猨ava string類型轉(zhuǎn)換boolean類型的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11

