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)文章
解析SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù)的問(wèn)題
Minio是Apache?License?v2.0下發(fā)布的對(duì)象存儲(chǔ)服務(wù)器,使用MinIO構(gòu)建用于機(jī)器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工作負(fù)載的高性能基礎(chǔ)架構(gòu)。這篇文章主要介紹了SpringBoot?搭建基于?MinIO?的高性能存儲(chǔ)服務(wù),需要的朋友可以參考下2022-03-03Spring?Boot深入排查?java.lang.ArrayStoreException異常
這篇文章介紹了Spring?Boot深入排查?java.lang.ArrayStoreException異常,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12SpringBoot整合多個(gè)Mq服務(wù)做法詳解
SpringBoot整合rabbitmq很容易,但是整合的目的是為了使用,那要使用rabbitmq就要對(duì)其有一定的了解,不然容易整成一團(tuán)漿糊。因?yàn)檎f(shuō)到底,SpringBoot只是在封裝rabbitmq的API,讓其更容易使用而已,廢話不多說(shuō),讓我們一起整它2023-02-02Java的LinkedHashMap的實(shí)現(xiàn)原理詳解
這篇文章主要介紹了Java的LinkedHashMap的實(shí)現(xiàn)原理詳解,???LinkedHashMap是Map接口的哈希表和鏈接列表實(shí)現(xiàn),具有可預(yù)知的迭代順序,此實(shí)現(xiàn)提供所有可選的映射操作,并允許使用null值和null鍵,此類不保證映射的順序,特別是它不保證該順序恒久不變,需要的朋友可以參考下2023-09-09java實(shí)現(xiàn)的根據(jù)概率隨機(jī)中獎(jiǎng)測(cè)試類
這篇文章主要介紹了java實(shí)現(xiàn)的根據(jù)概率隨機(jī)中獎(jiǎng)測(cè)試類,結(jié)合完整實(shí)例形式詳細(xì)分析了java隨機(jī)數(shù)實(shí)現(xiàn)概率運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-09-09PowerDesigner連接數(shù)據(jù)庫(kù)的實(shí)例詳解
這篇文章主要介紹了PowerDesigner連接數(shù)據(jù)庫(kù)的實(shí)例詳解的相關(guān)資料,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,需要的朋友可以參考下2017-10-10springcloud?gateway高級(jí)功能之集成apollo后動(dòng)態(tài)刷新路由方式
這篇文章主要介紹了springcloud?gateway高級(jí)功能之集成apollo后動(dòng)態(tài)刷新路由方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08