1. 程式人生 > >java(多)執行緒中注入Spring的Bean

java(多)執行緒中注入Spring的Bean

問題描述

    專案中很多地方都用到了非同步方式或多執行緒,也就是開啟新執行緒處理一些業務。在新執行緒中,用spring註解@Autowire注入Bean會丟擲nullPointerException,也就是Spring Bean沒有被注入,bean物件的值為null。

原因分析

    web容器在啟動應用時,並沒有提前將執行緒中的bean注入

解決方案

    使用靜態方法直接取的容器中的spring物件

    1. 定義工具類如下,並且需要配置成spring中的bean:

/**
 * 獲取spring物件的工具類
 */
@Component
public class FrameSpringBeanUtil
implements ApplicationContextAware {
private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext arg0) throws BeansException { applicationContext = arg0; } @SuppressWarnings("unchecked") public static <T> T getBean
(String name) { return (T) applicationContext.getBean(name); } public static <T> T getBean(Class<T> cls) { return applicationContext.getBean(cls); } }

    2. 執行緒中獲取bean:

final WmsOrderService wmsOrderService = FrameSpringBeanUtil.getBean(WmsOrderService.class
);

相關推薦

java執行注入Spring的Bean

問題描述     專案中很多地方都用到了非同步方式或多執行緒,也就是開啟新執行緒處理一些業務。在新執行緒中,用spring註解@Autowire注入Bean會丟擲nullPointerException,也就是Spring Bean沒有被注入,bean物件的值

通過python實現TCP在客戶端和伺服器上的單執行的程式設計

1、只支援一個客戶端訪問 伺服器: from socket import * address='127.0.0.1' #監聽哪些網路 127.0.0.1是監聽本機 0.0.0.0是監聽整個網路 port=12345 #監聽自己的哪個埠 buffsize=

Java執行注入Spring的Bean-使用靜態方法直接取的容器的spring物件

目前認為比較好的解決方案。 1,工具類 public class SpringApplicationContextHolder implements ApplicationContextAware { private static ApplicationContext context

Java——執行基本使用 執行組和執行池的使用,工廠設計模式的使用

1.執行緒組的概述和使用 Java中使用ThreadGroup來表示執行緒組,它可以對一批執行緒進行分類管理,Java允許程式直接對執行緒組進行控制。            &n

java執行:執行的五種基本狀態以及生命週期

1、Java執行緒具有五中基本狀態: 新建狀態(New):當執行緒物件對建立後,即進入了新建狀態,如:Thread thread1 = new MyThread(); 就緒狀態(Runnable):當呼叫執行緒物件的start()方法[ 如:thread1 .start(); ],執行緒

java執行13執行

當程式中需要大量並且生存週期很短的執行緒時候,可以考慮使用執行緒池,執行緒池的工作原理是線上程池創立的時候就建立大量空閒的執行緒,當一個Runnable或者Callable物件傳到執行緒池的時候,執行緒池就啟動一執行緒來執行他們的run或者call方法,當run或者call方

Java執行2—— 執行實現之繼承Thread類

1.1、使用多執行緒 一個程序在執行時至少會有1個執行緒在執行,執行緒會在後臺執行;例如呼叫public static void main() 方法的執行緒就是如此,而且由JVM建立。 package

Java執行程式設計-1-執行安全和鎖Synchronized概念

一、程序與執行緒的概念 (1)在傳統的作業系統中,程式並不能獨立執行,作為資源分配和獨立執行的基本單位都是程序。 在未配置 OS 的系統中,程式的執行方式

java基礎執行4執行可見性volatile 執行封閉threadlocal CAS操作

一。執行緒的可見性volatile(不是太常用,因為他只能解決執行緒可見和阻止指令排序,並不能解決多執行緒的併發問題) volatile:(1)保證變數的修改讓所有執行緒可見 (2)阻止指令排序 這個程式有3個結果,0,42,沒有進入迴圈直接結束

Java 執行—— 執行的同步

實現Runnable介面 public class TestThread2 { public static void main(String [] args){ Window window=new Window(); Thread thread1=new

Java 執行—— 執行的生命週期及方法

這篇部落格介紹執行緒的生命週期。   執行緒是一個動態執行的過程,它也有從建立到死亡的過程。 執行緒的幾種狀態 在 Thread 類中,有一個列舉內部類: 上面的資訊以圖片表示如下:   第一張圖:  第二張圖:把等待、計時等待、阻塞看成阻塞一個狀態了 1、新建狀態(ne

Java執行 —— 執行安全、執行同步、執行間通訊含面試題集

上一篇博文:Java多執行緒(一) —— 執行緒的狀態詳解中詳細介紹了執行緒的五種狀態及狀態間的轉換。本文著重介紹了執行緒安全的相關知識點,包括執行緒同步和鎖機制、執行緒間通訊以及相關面試題的總結 一、執行緒安全 多個執行緒在執行同一段程式碼的時候,每次的執行結果和單執行緒執行的結果都是一樣的,不存在執行結果

Java執行 —— 執行的狀態詳解

一、多執行緒概述  1、 程序 是一個正在執行的程式。是程式在計算機上的一次執行活動。 每一個程序執行都有一個執行順序。該順序是一個執行路徑,或者叫一個控制單元。 系統以程序為基本單位進行系統資源的排程和分配。程式要執行,系統就在記憶體中為該程式分配一塊獨立的記憶體空間,載入程式程式碼和資源進行執行。 程式

Java執行程式設計-3-執行本地ThreadLocal的介紹與使用

原文出自 : https://blog.csdn.net/xlgen157387/article/details/78114278 ThreadLocal簡介 我們通過上兩篇的學習,我們已經知道了變數值的共享可以使用public static變數的形式,所有的執行緒都使

java執行與高併發庫應用執行建立和定時任務Timer

1、建立執行緒的兩種方式, 通過start, 執行run方法。 第一種實現runnable, 定義類實現Runnable介面 重寫Runnable介面中的run方法 通過Thread建立執行緒物件 將Runnable介面的子類物件作為實際引數傳遞

Java執行2——執行的幾個重要方法詳解

【內容摘要】 在java中,如果需要進行多執行緒程式設計,可以採用java自帶的執行緒池來實現,執行緒池對於我們新手來說是一個非常好的選擇,因為我們可以不用關心執行緒池中執行緒是如何排程的,避免在多執行緒程式設計過程產生死鎖等問題。在瞭解執行緒池的使用前,本文

python爬蟲入門八:程序/多執行緒 python佇列Queue Python多執行緒(2——執行緒同步機制 python學習筆記——程序共享記憶體Value & Array python 之 程序 Python程序 Python 使用multiprocessing 特別耗記

什麼是多執行緒/多程序 引用蟲師的解釋: 計算機程式只不過是磁碟中可執行的,二進位制(或其它型別)的資料。它們只有在被讀取到記憶體中,被作業系統呼叫的時候才開始它們的生命期。 程序(有時被稱為重量級程序)是程式的一次執行。每個程序都有自己的地址空間,記憶體,資料棧以及其它記錄其執行軌跡的輔助資料

java執行:5、Java執行的支援執行優先順序

一、執行緒優先順序 在java當中,每一個執行緒都有一個優先順序,我們可以通過Thread當中的getPriority()方法、setPriority方法去得到一個執行緒的優先順序和設定一個執行緒的優先順序。  設定執行緒優先順序,它的引數是一個整形。最小為1(Thread.M

Java 執行詳解------執行的宣告週期

這篇部落格介紹執行緒的生命週期。   執行緒是一個動態執行的過程,它也有從建立到死亡的過程。 在 Thread 類中,有一個列舉內部類:    上面的資訊以圖片表示如下:   第一張圖:      第二張圖:把等待、計時等待、阻塞看成阻塞一個狀態了    1、新建狀態(new):使用 new 建立一個

Java執行執行4--執行池的五種狀態

執行緒池的5種狀態:Running、ShutDown、Stop、Tidying、Terminated。 執行緒池各個狀態切換框架圖: 1、RUNNING (1) 狀態說明:執行緒池處在RUNNING狀態時,能夠接收新任務,以及對已新增的任務進行處理。