在項目開發中遇到一個問題,項目中使用了一個開源項目Quartz
(Quartz是一個完全由Java編寫的開源作業調度框架,為在Java應用程序中進行作業調度提供了簡單卻強大的機制。Quartz允許開發人員根據時間間隔來調度作業。這是百度的)。
具體業務就是在特定的時間去操作數據,但是這個時間屬性是由前台傳遞給后台的。
因此在Quartz的實現類在特定的時間需要使用Service接口,來修改數據庫的數值,
因此一開始我在Quartz的實現類中直接使用了@AUTOWIRED來進行注入;
不過測試了幾次之后發現,注入的serviceimpl都報了空指針錯誤!也就是說並沒有將service的實現成功注入;

后來一想,因為我調用Quartz的實現的時候是通過他的框架來進行工作;
接口提供的方法是傳遞Quartz的實現的CLASS,所以Quartz實現類的對象在內存中應該是不受Spring控制的,所以其中調用的service接口也不受spring控制,故此注入失敗,
解決方法1:
加入一個springBean管理工具:
package com.lewkay.demo.util;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import java.util.Map;
/**
* Spring bean獲取工具類
* Created by lk on 2017/2/16.
*/
public class SpringBeanFactoryUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* 獲取applicationContext對象
* @return
*/
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
/**
* 根據bean的id來查找對象
* @param id
* @return
*/
public static Object getBeanById(String id){
return applicationContext.getBean(id);
}
/**
* 根據bean的class來查找對象
* @param c
* @return
*/
public static Object getBeanByClass(Class c){
return applicationContext.getBean(c);
}
/**
* 根據bean的class來查找所有的對象(包括子類)
* @param c
* @return
*/
public static Map getBeansByClass(Class c){
return applicationContext.getBeansOfType(c);
}
}
后面,在任何不受spring管理的類中都可以使用此工具獲取受spring管理的bean了
寫的比較水,見諒!
