線程中調用service 處理具體的業務,在多線程時使用@Autowired總是獲取不到bean,原因是:new thread不在spring容器中,也就無法獲得spring中的bean對象。
線程入口,直接寫個main方法執行的,運行則獲取不到service。需要在 SpringBootApplication 中啟動。

/******************************************* BeanContext 類 *******************/
/*************************************用靜態方法直接取的容器中的spring對象*****************/
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class BeanContext implements ApplicationContextAware {
// Spring應用上下文環境
private static ApplicationContext applicationContext;
/*
* 實現了ApplicationContextAware 接口,必須實現該方法;
* 通過傳遞applicationContext參數初始化成員變量applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
BeanContext.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
return (T)applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> clz) throws BeansException {
return (T)applicationContext.getBean(clz);
}
}
/******************************************* TestHandler 類 *******************/

