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

Spring 多線程下注入bean問題詳解

 更新時(shí)間:2017年10月16日 15:01:14   作者:jijs  
本篇文章主要介紹了Spring 多線程下注入bean問題詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

本文介紹了Spring 多線程下注入bean問題詳解,分享給大家,具體如下:

問題

Spring中多線程注入userThreadService注不進(jìn)去,顯示userThreadService為null異常

代碼如下:

public class UserThreadTask implements Runnable {
  @Autowired
  private UserThreadService userThreadService;

  @Override
  public void run() {
    AdeUser user = userThreadService.get("0");
    System.out.println(user);
  }
}

解決方案一

把要注入的Service,通過構(gòu)造傳過去,代碼如下:

public class UserThreadTask implements Runnable {
  private UserThreadService userThreadService;

  public UserThreadTask(UserThreadService userThreadService) {
    this.userThreadService = userThreadService;
  }

  @Override
  public void run() {
    AdeUser user = userThreadService.get("0");
    System.out.println(user);
  }
}
Thread t = new Thread(new UserThreadTask(userThreadService));
t.start();

解決方案二

通過ApplicationContext中獲取需要使用的Service

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class ApplicationContextHolder implements ApplicationContextAware {
  private static ApplicationContext context;
  @Override
  public void setApplicationContext(ApplicationContext context) throws BeansException {
    ApplicationContextHolder.context = context;
  }
  //根據(jù)bean name 獲取實(shí)例
  public static Object getBeanByName(String beanName) {
    if (beanName == null || context == null) {
      return null;
    }
    return context.getBean(beanName);
  }
  //只適合一個(gè)class只被定義一次的bean(也就是說,根據(jù)class不能匹配出多個(gè)該class的實(shí)例)
  public static Object getBeanByType(Class clazz) {
    if (clazz == null || context == null) {
      return null;
    }
    return context.getBean(clazz);
  }
  public static String[] getBeanDefinitionNames() {
    return context.getBeanDefinitionNames();
  }
}

Spring 加載自己定義的ApplicationContextHolder類

<bean class = "cn.com.infcn.applicationcontext.ApplicationContextHolder"></bean>

根據(jù) bean 的名稱獲取實(shí)例

復(fù)制代碼 代碼如下:

UserService user = (UserService) ApplicationContextHolder.getBeanByName("userService");

根據(jù) bean 的Class 獲取實(shí)例(如果該Class存在多個(gè)實(shí)例,會(huì)報(bào)錯(cuò)的)

復(fù)制代碼 代碼如下:

UserService user = (UserService) ApplicationContextHolder.getBeanByType(UserService.class);

這種方式,不管是否多線程,還是普通的不收spring管理的類,都可以使用該方法獲得spring管理的bean。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java中避免集合死鏈調(diào)用詳情

    java中避免集合死鏈調(diào)用詳情

    這篇文章主要介紹了java中避免集合死鏈調(diào)用,開發(fā)過程中, 一些集合 的變動(dòng)會(huì)觸發(fā)任務(wù)去 改變 其他的集合 ,為了保障任務(wù)的正確執(zhí)行,應(yīng)避免出現(xiàn)死循環(huán)調(diào)用,即對(duì) 集合之間的影響關(guān)系 進(jìn)行一些限制,下面文章就來看看這種問題的避免
    2021-09-09
  • springboot druid mybatis多數(shù)據(jù)源配置方式

    springboot druid mybatis多數(shù)據(jù)源配置方式

    這篇文章主要介紹了springboot druid mybatis多數(shù)據(jù)源配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 推薦兩款java開發(fā)實(shí)用工具 hutool 和 lombok

    推薦兩款java開發(fā)實(shí)用工具 hutool 和 lombok

    通過本文給大家推薦兩款java開發(fā)實(shí)用工具 hutool 和 lombok,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-04-04
  • Java中synchronized正確使用方法解析

    Java中synchronized正確使用方法解析

    這篇文章主要介紹了Java中syncronized正確使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java實(shí)現(xiàn)統(tǒng)計(jì)文件夾下所有文件的字?jǐn)?shù)

    Java實(shí)現(xiàn)統(tǒng)計(jì)文件夾下所有文件的字?jǐn)?shù)

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)統(tǒng)計(jì)文件夾下所有文件的字?jǐn)?shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • QR 二維碼中插入圖片實(shí)現(xiàn)方法

    QR 二維碼中插入圖片實(shí)現(xiàn)方法

    這篇文章主要介紹了QR 二維碼中插入圖片實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 基于rocketmq的有序消費(fèi)模式和并發(fā)消費(fèi)模式的區(qū)別說明

    基于rocketmq的有序消費(fèi)模式和并發(fā)消費(fèi)模式的區(qū)別說明

    這篇文章主要介紹了基于rocketmq的有序消費(fèi)模式和并發(fā)消費(fèi)模式的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java實(shí)現(xiàn)List去重的五種方法詳解

    Java實(shí)現(xiàn)List去重的五種方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java中List去重的5種方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)和參考價(jià)值,需要的小伙伴可以了解一下
    2022-10-10
  • Springboot啟動(dòng)原理和自動(dòng)配置原理解析

    Springboot啟動(dòng)原理和自動(dòng)配置原理解析

    這篇文章主要介紹了Springboot啟動(dòng)原理和自動(dòng)配置原理解析,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Spring Boot四大神器之CLI的具體使用

    Spring Boot四大神器之CLI的具體使用

    本文主要介紹了Spring Boot四大神器之CLI的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論