1. 程式人生 > >**執行緒裡面使用註解(執行緒裡面spring使用註解無法注入值的解決辦法)**

**執行緒裡面使用註解(執行緒裡面spring使用註解無法注入值的解決辦法)**

今天在使用SSM框架(spring/springmvc/mybatis)進行開發時,自己也是第一次使用,所以遇到的問題也比較多啊·········

我今天是在一條執行緒裡面使用註解時,發現一直報空指標異常,仔細看了一下發現使用註解時並沒有注入值,所以才一直空指標異常·····
再仔細對比一下之前我自學時的程式碼,發現呼叫流程也沒有錯,搞了半天也沒找出什麼原因······

最後想了一下,我是啟動伺服器的時候,就啟動這條執行緒監聽埠了,關鍵就在這,我這個是執行緒,不是我之前熟悉的action!!!

最後才知道執行緒裡面是不能直接注入bean的,好了,不說了,直接上程式碼

第一步:寫好獲取bean的工具類

import java.util.Locale;

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

/** 
 * 專案名稱: 
 * 類名: SpringContextUtil
 * 描述: 獲取bean的工具類,可用於線上程裡面獲取bean
 * 建立人: awsm
 * 建立時間: Dec 17, 2015 10:46:44 PM
 * 修改人:awsm
 * 修改時間:Dec 17, 2015 10:46:44 PM
 * 修改備註:
 * 版本:1.0
 */
public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext context = null; /* (non Javadoc) * @Title: setApplicationContext * @Description: spring獲取bean工具類 * @param applicationContext * @throws BeansException * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) */
@Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.context = applicationContext; } public static <T> T getBean(String beanName){ return (T) context.getBean(beanName); } public static String getMessage(String key){ return context.getMessage(key, null, Locale.getDefault()); } }

第二步:在spring的配置檔案裡面註冊這個工具類,我的是在spring-mybatis.xml,即spring和mybatis的整合配置檔案中。

 <!-- 註冊Spring工具類 -->
    <bean id="springContextUtil" class="com.kgzt.idcqzt.pub.SpringContextUtil"></bean>

第三步:線上程裡面獲取bean

/*
         * 線上程中是不能直接從容器中獲取bean的,
         * 需要另寫一個工具類來獲取
         * */
        KeepAliveService keepAliveService = SpringContextUtil.getBean("keepAliveService");

第三步就是寫線上程裡面的,是不是可以獲取到bean啦····
程式碼是參考前輩的大牛的,感謝大牛的付出!!!

相關推薦

Spring3.1完全基於註解配置@Configuration類中@Autowire無法注入問題解決

在上回介紹Spring3.1+Hibernate4.1.7基於註解配置的時候(《SpringMVC3.1+Hibernate4.1.7完全基於註解配置(零配置檔案)》)說過,在修改配置方式的時候遇到過不少問題。這裡介紹一下。 方式一 On

maven整合CXF WebService+Spring @Resource無法注入問題解決方法

筆者是一個出道不長的小碼農.工作中需要用的maven 結合jetty容器進行開發的前提背景下 廢話不多說直接上程式碼 更改前的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns=

Spring-cloud無法正常啟動解決辦法

java 啟動方法如下 package com.example.product; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoc

**執行裡面使用註解(執行裡面spring使用註解無法注入解決辦法)**

今天在使用SSM框架(spring/springmvc/mybatis)進行開發時,自己也是第一次使用,所以遇到的問題也比較多啊········· 我今天是在一條執行緒裡面使用註解時,發現一直報空指標異常,仔細看了一下發現使用註解時並沒有注入值,所以才一直空指

QT多執行中,物件訊號與槽連線不上的解決辦法

1、在接收者建立執行緒中,把接收者移動到主執行緒中: pReceiverObj->moveToThread(QApplication::instance()->thread()); 2、這樣傳送訊號的時候,就會在主執行緒事件佇列處理中來處理了。 把connect的最

執行中更新視窗不能直接呼叫UpdateData函式 的解決辦法

李群會回覆於15日21點16分  LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);加到你的標頭檔案中去 tonygesong回覆於15日21點31分  1.自定義訊息:  #define WM_UPDATEDA

Eclipse中Maven專案執行Maven update project 專案JRE System Library變為1.5的解決辦法

1:問題描述 Eclipse中的Maven專案,本地Java版本1.8,每次右擊專案--maven--update project(Alt+F5) 後,專案JRE System Library 都變為1.5。 2:異常原因 檢視Maven官網  如下: This i

linux關於執行編譯後命令找不到動態庫.so檔案的解決辦法

方法一:(沒有root許可權)利用find找到報錯動態庫檔案目錄lib路徑,vim /home/xxx/.bashrc 新增一行: export LD_LIBRARY_PATH=動態庫/lib:$LD_LIBRARY_PATH 然後 source /home/xxx/.bashrc

使用Eclipse生成可執行exe檔案的操作步驟&&FatJar無法安裝問題解決方案

剛剛從C++轉到Java,eclipse的操作用起來很彆扭。最麻煩的就是沒有可執行檔案了。每次都要開啟Eclipse啟動專案。所以就想著做個exe,也方便專案使用。 說做就做,網上百度了一下,大致分兩步。第一步是打成jar包,第二步就是把jar包打成exe檔案。 1 打包jar

若要執行應用程式,您必須首先安裝 .NET Framework 4.0 解決辦法

在安裝很多程式,或者遊戲的時候會彈出這個提示視窗,這是因為電腦上缺少 .NET Framework 4.0 ,下面貼上 .NET Framework 4.0的下載地址 安裝之後即可解。 若是在

執行Tomcat出現the JRE_HOME environment variable is not defined correctly 的解決辦法

作業系統:WIN 7 x64 已經安裝了JDK1.7 和對應JRE 並設定了JAVA_HOME、JRE_HOME 但Tomcat在啟動過程中找不到 報錯資訊如下: the JRE_HOME environment variable is not defined corre

Android開發異常篇:執行工程出現:Connection with adb was interrupted錯誤提示以及解決辦法

1.[2012-10-16 10:49:35 - My First App] Android Launch! 2.[2012-10-16 10:49:35 - My First App] Co

TP5本地執行正常,線上執行某頁面出現【模板檔案不存在】問題的解決辦法

相信許多小夥伴和我一樣,明明在本地執行頁面一切正常,而到線上(本人是用的虛擬主機)出現瞭如下圖的問題: 其實這個問題出現的原因很簡單,就是我們開發是在windows 系統下,windows系統對大小寫不敏感,而虛擬主機Linux,區分大小寫,所以解決辦法很簡單,如下圖所示:   解決方法就

Spring @Value("$XXX")注入失敗,錯誤資訊提示:Could not resolve placeholder佔位符不能被解析

問題原因: Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'wx.app.config.appid' in string value "${wx.app.config

直接new 物件 Spring 不會注入解決方法

1.建一個類實現ApplicationContextAware介面,有一個引用ApplicationContext的靜態成員,然後,遺留系統需要引用spring管理的bean的地方,使用這個類。 package com.eliteams.quick4j.web

service手動例項化(new)導致類中的spring物件無法注入的問題解決

    下面說的這個畫橫線的可能是錯誤的,因為我之前用controller繼承父類的註解物件的時候成功了,所以可能這次的唯一原因就是 不該把本該從ioc容器中拿出的物件通過new的方式例項化,至於繼承註解物件應該是可以的。 首先,如果打算用繼承,那麼父類被注入的物件是無法繼承的,手

Spring boot 無法注入service

SpringBoot專案的Bean裝配預設規則是根據Application類所在的包位置從上往下掃描! “Application類”是指SpringBoot專案入口類。這個類的位置很關鍵: 如果Appl

spring AOP中自身方法呼叫無法應用代理解決辦法

如下例: public class MyServiceImpl implements MyService { public void do(){ //the transaction annotation won't work if yo

在controller中無法通過註解@Value獲取到配置文件中定義的解決辦法

component value wired pat lac ice rop 獲取 mvc 使用springMVC的朋友,有時候可能會遇到以下問題: 想在controller中使用@Value指定變量,但是無法得到對應的值。而在server層獲取,是正常的。解決方案:1:在s

關於在C++類裡面建立執行

將執行緒函式宣告為靜態函式或者友元函式,但是靜態函式只能訪問靜態成員變數,所以利用引數將this傳進函式來,就可以通過該指標訪問類成員變數和函數了。具體例子: 不多說了,直接上程式碼: lll.h #include<afxwin.h> #include<