線程中調用service 處理具體的業務


  線程中調用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 類 *******************/
 

 

 
        

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM