解決反射調(diào)用方法時(shí)獲取bean失敗的問(wèn)題
1、問(wèn)題描述
通過(guò)反射機(jī)制調(diào)用某個(gè)類(lèi)的方法時(shí),此類(lèi)內(nèi)@Autowired注入失敗,并且事務(wù)回滾失敗。
2、原因
Class.forName(“className”).newInstance()
實(shí)例化對(duì)象后與Spring IOC容器無(wú)關(guān)(自己通過(guò)反射獲取的對(duì)象,沒(méi)有交給spring容器管理),所以@Autowired無(wú)法關(guān)聯(lián)注入對(duì)象也無(wú)法支持事務(wù)。
3、解決方案
通過(guò)applicationContext.getBean(“className”)來(lái)獲取bean。
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext; // Spring應(yīng)用上下文環(huán)境
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if(SpringContextUtil.applicationContext == null){
SpringContextUtil.applicationContext = applicationContext;
}
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
public static Object getBean(String name, Class requiredType)
throws BeansException {
return applicationContext.getBean(name, requiredType);
}
// 通過(guò)class獲取Bean.
public static <T> T getBean(Class<T> clazz) {
return getApplicationContext().getBean(clazz);
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java while和do...while循環(huán)的使用方式
文章對(duì)比Java while與do-while循環(huán)的核心機(jī)制、語(yǔ)法差異、適用場(chǎng)景及錯(cuò)誤防范,強(qiáng)調(diào)do-while至少執(zhí)行一次的特點(diǎn),指出語(yǔ)法規(guī)范(如結(jié)尾分號(hào))和性能優(yōu)化要點(diǎn),并提及Java17模式匹配對(duì)循環(huán)的擴(kuò)展支持2025-07-07
springboot整合shiro之thymeleaf使用shiro標(biāo)簽的方法
Thymeleaf 是一個(gè)跟 Velocity、FreeMarker 類(lèi)似的模板引擎,它可以完全替代 JSP ,這篇文章主要介紹了springboot整合shiro之thymeleaf使用shiro標(biāo)簽的相關(guān)知識(shí),需要的朋友可以參考下2021-10-10
SpringBoot+Vue3實(shí)現(xiàn)七牛云大視頻上傳
現(xiàn)代Web應(yīng)用中文件上傳很重要,本文用Vue.js和Spring Boot實(shí)現(xiàn)視頻上傳功能,同時(shí)使用七牛云作為存儲(chǔ)服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-07-07
Java實(shí)現(xiàn)簡(jiǎn)單的socket通信教程
這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單的socket通信教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12
mybatis多對(duì)多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)
下面小編就為大家?guī)?lái)一篇mybatis多對(duì)多關(guān)聯(lián)實(shí)戰(zhàn)教程(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
Springboot結(jié)合Mybatis-Plus實(shí)現(xiàn)業(yè)務(wù)撤銷(xiāo)回滾功能
本文介紹了如何在Springboot結(jié)合Mybatis-Plus實(shí)現(xiàn)業(yè)務(wù)撤銷(xiāo)回滾功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12
Spring實(shí)現(xiàn)類(lèi)私有方法的幾個(gè)問(wèn)題(親測(cè)通用解決方案)
現(xiàn)實(shí)的業(yè)務(wù)場(chǎng)景中,可能需要對(duì)Spring的實(shí)現(xiàn)類(lèi)的私有方法進(jìn)行測(cè)試。本文給大家分享Spring實(shí)現(xiàn)類(lèi)私有方法面臨的幾個(gè)問(wèn)題及解決方案,感興趣的朋友跟隨小編一起看看吧2021-06-06

