溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringBoot如何實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean

發(fā)布時(shí)間:2022-03-03 15:14:21 來源:億速云 閱讀:598 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)SpringBoot如何實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

普通類調(diào)用Spring管理的Service、dao等bean

在springboot的使用中,有時(shí)需要在其他的普通類中調(diào)用托管給spring的dao或者service,從而去操作數(shù)據(jù)庫。網(wǎng)上大多數(shù)的資料都是說添加一些注解什么的,但是這都是不行的。

舉個(gè)使用情景

比如在服務(wù)器在于硬件或者客戶端之間進(jìn)行Socket通訊時(shí),那么如果說服務(wù)器收到了一條消息,需要去操作數(shù)據(jù)庫的話,怎么去調(diào)用Service或者dao去操作數(shù)據(jù)庫呢?

下面來看我給出的解決辦法

(1)首先需要新建一個(gè)類,實(shí)現(xiàn) ApplicationContextAware 接口。

@Component  
public class SpringUtils implements ApplicationContextAware {  
    private static ApplicationContext applicationContext = null;  
    @Override  
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
        if(SpringUtils.applicationContext == null){  
            SpringUtils.applicationContext  = applicationContext;  
        }  
    }  
 
    //獲取applicationContext  
    public static ApplicationContext getApplicationContext() {  
        return applicationContext;  
    }  
 
    //通過name獲取 Bean.  
    public static Object getBean(String name){  
        return getApplicationContext().getBean(name);  
    }  
 
    //通過class獲取Bean.  
    public static <T> T getBean(Class<T> clazz){  
        return getApplicationContext().getBean(clazz);  
    }  
 
    //通過name,以及Clazz返回指定的Bean  
    public static <T> T getBean(String name,Class<T> clazz){  
        return getApplicationContext().getBean(name, clazz);  
    }  
}

(2)在通訊類中獲取ApplicationContext對象,然后去獲取需要的service 或者 dao。

SpringBoot如何實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean

然后就可以直接調(diào)用了。

SpringBoot如何實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean

普通類中使用service、dao層中的類,只需三步

在一個(gè)web項(xiàng)目的jsp中想要使用service中的一個(gè)類來獲取數(shù)據(jù)庫中的數(shù)據(jù),但是用完之后報(bào)錯(cuò)說是空指針異常,上網(wǎng)查了之后總結(jié)了一下解決辦法,只需三步。

1、寫一個(gè)工具類 SpringUtil

package com.shop.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public final class SpringUtil implements ApplicationContextAware {
	private static ApplicationContext applicationContext = null;
	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		// TODO Auto-generated method stub
		if (SpringUtil.applicationContext == null) {
			SpringUtil.applicationContext = applicationContext;
			System.out.println(
					"========ApplicationContext配置成功,在普通類可以通過調(diào)用ToolSpring.getAppContext()獲取applicationContext對象,applicationContext="
							+ applicationContext + "========");
		}
	}
	
	public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}
	
	//通過
	public static Object getBean(String name) {
		return getApplicationContext().getBean(name);
	}
	
	//通過class獲取Bean.
    public static <T> T getBean(Class<T> clazz){
           return getApplicationContext().getBean(clazz);
    }
}

2、在Application啟動類中將工具類導(dǎo)入

不然依然無法使用

SpringBoot如何實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean

3、在ApplicationTests測試類中調(diào)用

package com.shop.JZShop;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.shop.serviceImpl.GoodsServiceImpl;
import com.shop.util.SpringUtil;
@RunWith(SpringRunner.class)
@SpringBootTest
public class JzShopApplicationTests {
	
	@Test
	public void contextLoads() {
		//GoodsServiceImpl為我想要獲取的service層中的類
		GoodsServiceImpl goodsServiceImpl = (GoodsServiceImpl)SpringUtil.getBean(GoodsServiceImpl.class);
		System.out.println(goodsServiceImpl.getGoodsByID(27).getGoodsName());
	}
}

關(guān)于“SpringBoot如何實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI