Java 如何從spring容器中獲取注入的bean對(duì)象
1.使用場(chǎng)景
控制層調(diào)用業(yè)務(wù)層時(shí),控制層需要拿到業(yè)務(wù)層在spring容器中注入的對(duì)象
2.代碼實(shí)現(xiàn)
import org.apache.struts2.ServletActionContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils;
/**
* 從spring容器中獲取注入的bean對(duì)象
* @explain 必須獲取到ServletContext對(duì)象,Controller層以struts2為例
* @author Marydon
* @creationTime 2018年6月1日上午10:06:49
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
public final class BeansUtils {
private static final Logger logger = LoggerFactory.getLogger(BeansUtils.class);
private static ApplicationContext ctx;
private static WebApplicationContext webCtx;
// 靜態(tài)代碼塊:加載該類時(shí)會(huì)被運(yùn)行的代碼
static {
if (ctx == null) {
try {
// 入?yún)⑿枰玫絊ervletContext對(duì)象
webCtx = WebApplicationContextUtils
.getRequiredWebApplicationContext(ServletActionContext.getServletContext());
logger.info("從web.xml容器中加載spring-config.xml");
} catch (Exception e) {
logger.info("直接加載spring-config.xml");
}
if (webCtx == null)
// 你可以自定義spring配置文件的文件名
ctx = new ClassPathXmlApplicationContext("spring-config.xml");
}
}
/**
* 通過(guò)beanID獲取bean實(shí)例
*
* @param beanID
* bean的代碼
* @return 返回對(duì)應(yīng)的實(shí)例
* @throws RuntimeException
* bean沒(méi)有定義
*/
public static Object getBeanInstance(String beanID) throws RuntimeException {
logger.info("在spring容器中獲取Bean對(duì)象 ID=" + beanID);
Object obj;
if (BeansUtils.ctx == null) {
if (BeansUtils.webCtx.containsBeanDefinition(beanID)) {
obj = BeansUtils.webCtx.getBean(beanID);
} else {
logger.info("beanID=" + beanID + "沒(méi)有定義");
throw new RuntimeException(beanID + "沒(méi)有定義!");
}
} else {
if (BeansUtils.ctx.containsBeanDefinition(beanID)) {
obj = BeansUtils.ctx.getBean(beanID);
} else {
logger.info("beanID=" + beanID + "沒(méi)有定義");
throw new RuntimeException(beanID + "沒(méi)有定義!");
}
}
return obj;
}
}
以上就是Java 如何從spring容器中獲取注入的bean對(duì)象的詳細(xì)內(nèi)容,更多關(guān)于Java獲取bean對(duì)象的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
RestTemplate在Spring或非Spring環(huán)境下使用精講
這篇文章主要為大家介紹了RestTemplate在Spring或非Spring環(huán)境下使用精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
IDEA卡在”正在解析Maven依賴項(xiàng)“的解決方法
在創(chuàng)建新的SpringBoot項(xiàng)目時(shí),始終卡在"正在解析Maven依賴項(xiàng)…",本文小編給大家介紹了幾種相關(guān)的解決方案,具有一定的參考價(jià)值,需要的朋友可以參考下2023-11-11
Spring Cloud Gateway 如何修改HTTP響應(yīng)信息
這篇文章主要介紹了Spring Cloud Gateway 修改HTTP響應(yīng)信息的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Javaweb EL自定義函數(shù)開(kāi)發(fā)及代碼實(shí)例
這篇文章主要介紹了Javaweb EL自定義函數(shù)開(kāi)發(fā)及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Java實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
如何解決getReader() has already been called&
這篇文章主要介紹了如何解決getReader() has already been called for this request問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

