Thread子類中,不能使用Spring註解,變數為null
執行緒裡面,不能使用註解,Spring本身預設Bean為單例模式構建,同時是非執行緒安全的,因此禁止了在Thread子類中的注入行為,因此在Thread中直接注入的bean是null的。
解決辦法有很多個,可自行在網上搜索,本文的解決辦法如下:
- 建立SpringContextUtils類如下。
package com.vdes.modles.utils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Repository;
import org.springframework.util.Assert;
@Repository
public class SpringContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public static ApplicationContext getContext() {
return applicationContext;
}
/**
* 從靜態變數ApplicationContext中取得Bean, 自動轉型為所賦值物件的型別.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean (String name) {
checkApplicationContext();
return (T) applicationContext.getBean(name);
}
/**
* 從靜態變數ApplicationContext中取得Bean, 自動轉型為所賦值物件的型別.
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
return (T) applicationContext.getBeansOfType(clazz);
}
private static void checkApplicationContext() {
Assert.notNull(applicationContext,
"applicaitonContext未注入,請在applicationContext.xml中定義SpringContextUtil");
}
}
由於執行緒內不能使用註解,可以使用該類來獲取bean
- 在Spring配置檔案中,新增如下程式碼,配置bean
<bean lass="com.vdes.modles.utils.SpringContextUtils"/>
3.線上程類裡面,使用如下程式碼來獲取bean
VdesMessageService vdesMessageService = SpringContextUtils.getBean("vdesMessageServiceImpl");
這裡需要注意的是,getBean()的引數應該為配置bean的id,由於本專案使用了註解掃描,並沒有為每一個類去配置bean,在使用id的時候,Spring預設id為類名首字母小寫。記住,getBean,get的只能是物件,對應的是Class ,而不能是介面,使用Service的時候,要使用它的具體實現類。
相關推薦
Thread子類中,不能使用Spring註解,變數為null
執行緒裡面,不能使用註解,Spring本身預設Bean為單例模式構建,同時是非執行緒安全的,因此禁止了在Thread子類中的注入行為,因此在Thread中直接注入的bean是null的。 解決辦法有很多個,可自行在網上搜索,本文的解決辦法如下: 建立Spr
如何在匿名thread子類中保證執行緒安全
在做效能測試的過程中,我寫了兩個虛擬類ThreadLimitTimeCount和ThreadLimitTimesCount做框架,通過對執行緒的標記來完成超時請求的記錄。舊方法如下: @Override protected void after() { requestMark.add
spring自定義類中@AutoWired標識的元素注入為null
最近在做專案的時候,發現程式執行的時候有一個nullpointer exception,一臉懵逼因為感覺程式沒什麼邏輯。後來發現是因為new出來的component不會自動注入它的元素。 現象:@Component修飾的自定義普通類中@Autowired屬性為null 原因:如果是通過new例項化的物件,
使用Spring註解,在靜態方法中注入bean(spring靜態注入元件——工具類常用)
如果直接用spring注入靜態屬性,則會報錯,提示@Resource annotation is not supported on static fields,如果又一定要通過spring注入bean,可以採用@PostConstruct註解在某個用來初始化的方法上,注入時注
如果父類中有構造函數,並且構造函數有參數,而子類沒有,因為子類繼承了這個構造函數,那麽創建子類對象的時候,要傳參
bsp class nbsp 參數 int init log ini elf 1 class a(): 2 def __init__(self,aa): 3 self.aa = aa 4 class b(a): 5 def do(self)
JavaSE8基礎 當父類與子類中的成員變量重名了,使用super.名字 來訪問父類的成員變量
public xtend tca ima his window logs java brush os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0)
JavaSE8基礎 不同包下的子類中,創建子類對象可以繼承到父類的 受保護/公有方法
cas jdk .sh imp java png pack ges pre os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0) 代碼:
子類中的屬性跟父類中的屬性重名的時候,會優先使用子類中的屬性
sta animal package 方法 pack stat ack har () package charter05; public class Animal { int age = 8; //如果父類中顯示的聲明了有參的構造方法, //而子類中沒有顯示的聲明有參構造方
使用spring中的註解@Autowired,獲取到的物件為null
最近工作中遇到一個關於@AutoWired註解使用的細節問題,以前沒有注意到,現在特意記錄一下。 問題描述:在我的一個工具類中,使用@Autowired需要注入一個dao物件,然後工具類的方法中會呼叫該dao物件中的方法,在執行時發現報空指標異常,dao物件居然是null。 相關程式碼如下:
使用Spring註解,在靜態方法中注入bean
@Component public class FTPUtil { //通過dicService讀取資料庫中的FTP引數 @Autowired private DicService dicService; private static FTPUtil fTPUtil;
使用spring註解,注入sessionFactory類
簡述 目前使用spring hibernate作為專案的框架,並且使用註解方式進行物件裝載。在裝載Dao物件的時候常常需要注入sessionFactory物件,通常的做法是Dao繼承至HibernateDaoSuppor,t然後在Dao中新增setSuperSessionF
Java中父類與子類的普通程式碼塊,構造程式碼塊,靜態程式碼塊 初始化
//示例程式碼: public class HelloB extends HelloA{ public HelloB(){ System.out.println("子類構造方法"); }
在類中定義抽象方法,同時在子類中通過重寫的方法實現該抽象方法
建立抽象類: package my; abstract class Fruit { public String color; public Fruit(){ color="綠色"; } public abstract voi
JavaSE8基礎 多態 創建子類對象的時候,先對初始化父類
java ges 構造方法 eclipse clas public 視頻 初始化 ati os :windows7 x64 jdk:jdk-8u131-windows-x64 ide:Eclipse Oxygen Release (4.7.0)
總結本次實訓中springMVC中常用的註解@,以後用到別的會持續更新
col ring key值 ppi div jsp頁面 ajax請求 map spa @Repository //dao層註解。聲明本層為dao層。 @serivce //service層。 @controller //con層。 @auto
窗體的基類中沒有設定大小,所以才不能居中,若要窗體居中,必須使用setfixedsize()函數或者resize()函數設定窗體的大小,居中才能正常使用
argv parent tails comment styles key har 位置 遇到 最近開發中,遇到了窗體不能居中的問題,看了網上的很多文章,窗口居中,無非都是move至窗口的中心目標; 有兩種方式, 一種在構造函數中直接計算中心坐標; 另一種是在窗口show後再
web工程啟動時,在一個類中延遲載入Bean,因為該Bean類可能還沒被JVM載入
問題描述: (1)javaWeb專案啟動中,還沒啟動完成,在下面這個類載入另一個Bean類, (2)通過getBean方法獲取到該Bean,可以獲取到,不為null (3)但是,呼叫該Bean的方法insertSelective()方法,進不去該方法 &nb
java異常練習題:定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果
題目描述: 定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。 定義一個DivException類繼承RuntimeException類,要求兩數相除等於2報錯,在主類中定義
1).定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。
1).定義一個MulException類繼承Exception類,要求兩數相乘等於100報錯,在主類中定義一個方法,在方法中丟擲此異常,在主方法觀察結果。 2).定義一個DivException類繼承RuntimeException類,要求兩數相除等於2報錯,在主類中定義一個方法,在方法中丟
向controller傳一個類,類中有一個list,400,415,500
報錯有可能是json格式不對,controller沒有@RequestBody,ajax沒有 contentType: 'application/json;charset=UTF-8', data: JSON.stringify(datas),//data沒有JSON.stringify()