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

原地址:http://blog.sina.com.cn/s/blog_98721cfd0102xj96.html

使用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"); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章