欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年11月16日 09:32:34   作者:嚴(yán)少來(lái)也  
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)其他普通類調(diào)用Spring管理的Service,dao等bean,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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

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

舉個(gè)使用情景

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

下面來(lái)看我給出的解決辦法

(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;  
    }  
 
    //通過(guò)name獲取 Bean.  
    public static Object getBean(String name){  
        return getApplicationContext().getBean(name);  
    }  
 
    //通過(guò)class獲取Bean.  
    public static <T> T getBean(Class<T> clazz){  
        return getApplicationContext().getBean(clazz);  
    }  
 
    //通過(guò)name,以及Clazz返回指定的Bean  
    public static <T> T getBean(String name,Class<T> clazz){  
        return getApplicationContext().getBean(name, clazz);  
    }  
}  

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

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

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

在一個(gè)web項(xiàng)目的jsp中想要使用service中的一個(gè)類來(lái)獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù),但是用完之后報(bào)錯(cuò)說(shuō)是空指針異常,上網(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配置成功,在普通類可以通過(guò)調(diào)用ToolSpring.getAppContext()獲取applicationContext對(duì)象,applicationContext="
							+ applicationContext + "========");
		}
	}
	
	public static ApplicationContext getApplicationContext() {
		return applicationContext;
	}
	
	//通過(guò)
	public static Object getBean(String name) {
		return getApplicationContext().getBean(name);
	}
	
	//通過(guò)class獲取Bean.
    public static <T> T getBean(Class<T> clazz){
           return getApplicationContext().getBean(clazz);
    }
}

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

不然依然無(wú)法使用

在這里插入圖片描述

3、在ApplicationTests測(cè)試類中調(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());
	}
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • @TransactionalEventListener的使用和實(shí)現(xiàn)原理分析

    @TransactionalEventListener的使用和實(shí)現(xiàn)原理分析

    這篇文章主要介紹了@TransactionalEventListener的使用和實(shí)現(xiàn)原理分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Hadoop之Mapreduce序列化

    Hadoop之Mapreduce序列化

    本文主要帶我們了解Mapreduce序列化,序列化就是把內(nèi)存中的對(duì)象,轉(zhuǎn)換成字節(jié)序列(或其他數(shù)據(jù)傳輸協(xié)議)以便于存儲(chǔ)到磁盤(持久化)和網(wǎng)絡(luò)傳輸。想進(jìn)一步了解更多的小伙伴,可以參考閱讀本文
    2023-03-03
  • java二分查找插入法

    java二分查找插入法

    當(dāng)你需要構(gòu)建一個(gè)大的有序隊(duì)列,用插入發(fā)太慢了,可以先用二分查找法,找到在隊(duì)列要插入的位置,把數(shù)后移一下,然后放進(jìn)去。比較效率,下面是java使用示例,需要的朋友可以參考下
    2014-03-03
  • SpringBoot實(shí)現(xiàn)模塊日志入庫(kù)的項(xiàng)目實(shí)踐

    SpringBoot實(shí)現(xiàn)模塊日志入庫(kù)的項(xiàng)目實(shí)踐

    本文主要介紹了SpringBoot實(shí)現(xiàn)模塊日志入庫(kù)的項(xiàng)目實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 使用session實(shí)現(xiàn)簡(jiǎn)易購(gòu)物車功能

    使用session實(shí)現(xiàn)簡(jiǎn)易購(gòu)物車功能

    這篇文章主要為大家詳細(xì)介紹了使用session實(shí)現(xiàn)簡(jiǎn)易購(gòu)物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • java實(shí)現(xiàn)單詞小游戲

    java實(shí)現(xiàn)單詞小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單詞小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • idea如何生成springboot單元測(cè)試用例

    idea如何生成springboot單元測(cè)試用例

    這篇文章主要介紹了idea生成springboot單元測(cè)試用例,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • JavaMail入門教程之發(fā)送郵件(3)

    JavaMail入門教程之發(fā)送郵件(3)

    這篇文章主要為大家詳細(xì)介紹了JavaMail入門教程之發(fā)送郵件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • java datetime數(shù)據(jù)類型去掉時(shí)分秒的案例詳解

    java datetime數(shù)據(jù)類型去掉時(shí)分秒的案例詳解

    在Java中,如果我們想要表示一個(gè)日期而不包括時(shí)間(時(shí)分秒),我們通常會(huì)使用java.time包中的LocalDate類,這篇文章主要介紹了java datetime數(shù)據(jù)類型去掉時(shí)分秒,需要的朋友可以參考下
    2024-06-06
  • Guava事件總線應(yīng)用場(chǎng)景最佳實(shí)踐

    Guava事件總線應(yīng)用場(chǎng)景最佳實(shí)踐

    這篇文章主要為大家介紹了Guava事件總線應(yīng)用場(chǎng)景最佳實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評(píng)論