1. 程式人生 > >解決 SpringMvc 非controller類使用@Autowired註解 service注入為null的問題

解決 SpringMvc 非controller類使用@Autowired註解 service注入為null的問題

使用SpringMVC框架,在開發的過程中有一些工具類、靜態非controller類需要呼叫由spring管理的service層。但是使用@Autowired註解注入Service,會報null異常;搜尋了下網上的一些方法,又實際測試了下,發現網上說的還缺少了點東西,所以自己總結下寫下來作為學習筆記吧,也希望能幫助下其他遇到這個問題的童鞋~好了下面說下具體實現步驟:

1、在配置檔案(springmvc.xml)中加入工具類所在包的掃描配置,我一開始按照網上的說法改造時就是因為這裡沒有配置,所以一直是null。"com.zzzy.bms.util"是我的工具類所在的包路徑

2、改造工具類,這裡的程式碼是拷貝的網上其他大神的,我稍微加了下注釋(

紅色部分為重點

@Component// 將工具類宣告為spring元件,這個必須不能忘

public class TestUtils {

@Autowired

private ItemService itemService;

@Autowired

// private ItemMapper itemMapper;

// 靜態初使化當前類

public static TestUtils testUtils;

// 在方法上加上註解@PostConstruct,這樣方法就會在Bean初始化之後被Spring容器執行(注:Bean初始化包括,例項化Bean,並裝配Bean的屬性(依賴注入))。

@PostConstruct

public void init() {

testUtils = this;

}

// utils工具類中使用service或mapper介面的方法例子,用"testUtils.xxx.方法" 就可以了

public static void test(Item record) {

// 呼叫service的方法

testUtils.itemService.insert(record);

}

}

好了,以上就是我的改造過程~我在自己的專案中測試通過了。

還有一些其他的方法,這邊也記錄下,不過沒有測試。覺得不太符合springmvc的使用習慣啊:

//applicationContext-service.xml為宣告service的配置檔名

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-service.xml");

//"userService"為配置檔案中定義的service的ID,

UserService uService = (UserService) ac.getBean("userService");