解決SpringMvc中普通類注入Service為null的問題
SpringMvc中普通類注入Service為null
場景:
使用Quartz定時器時,普通的java類需要注入spring的service類,在調(diào)用時報錯!
解決方式:
/** * 定時獲取課程的service */ @Autowired protected QuartzGetCourseService quartzGetCourseService = (QuartzGetCourseService) SpringContextUtil .getBean("quartzGetCourseService");
import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * 在Spring 注解中,普通類獲取@Service標(biāo)記的方法或者bean對象 * */ @Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextUtil.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 注意 bean name默認(rèn) = 類名(首字母小寫) 例如: A8sClusterDao = getBean("a8sClusterDao") * * @param name * @return * @throws BeansException */ public static Object getBean(String name) throws BeansException { return applicationContext.getBean(name); } /** * 根據(jù)類名獲取到bean * * @param <T> * @param clazz * @return * @throws BeansException */ @SuppressWarnings("unchecked") public static <T> T getBeanByName(Class<T> clazz) throws BeansException { try { char[] cs = clazz.getSimpleName().toCharArray(); cs[0] += 32;// 首字母大寫到小寫 return (T) applicationContext.getBean(String.valueOf(cs)); } catch (Exception e) { e.printStackTrace(); return null; } } public static boolean containsBean(String name) { return applicationContext.containsBean(name); } public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { return applicationContext.isSingleton(name); } }
調(diào)用結(jié)束,測試可以獲取Service.
spring之工具類使用service注入
一般需要在一個工具類中使用@Autowired 注解注入一個service。但是由于工具類方法一般都寫成static,所以直接注入就存在問題。
栗子:
@Component public class SmsController { private static Logger logger = LoggerFactory.getLogger(SmsController.class); @Autowired private MessagesInfoService messagesInfoService; private static SmsController smsController; @PostConstruct public void init() { smsController = this; smsController.messagesInfoService = this.messagesInfoService; } /** *短信歷史查詢接口(查詢某個時間段發(fā)送的短信) */ @RequestMapping(value = "/queryMessage",method = RequestMethod.GET) public ModelAndView queryMessage{ pager = messagesInfoService.findPager(map,5,pIndex); ModelAndView modelAndView = new ModelAndView("manage/jgdxgl/jgdx_qm"); List<MessagesInfo> list = pager.getItem(); modelAndView.addObject("pager",pager); modelAndView.addObject("list",list); return modelAndView } }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot從yml配置文件中讀常用參數(shù)值實例方法
在本篇文章里小編給大家整理了關(guān)于SpringBoot從yml配置文件中讀常用參數(shù)值實例方法,有需要的朋友們學(xué)習(xí)下。2019-12-12java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼
這篇文章主要介紹了java編程兩種樹形菜單結(jié)構(gòu)的轉(zhuǎn)換代碼,首先介紹了兩種樹形菜單結(jié)構(gòu)的代碼,然后展示了轉(zhuǎn)換器實例代碼,最后分享了相關(guān)實例及結(jié)果演示,具有一定借鑒價值,需要的朋友可以了解下。2017-12-12springboot斷點上傳、續(xù)傳、秒傳實現(xiàn)方式
這篇文章主要介紹了springboot斷點上傳、續(xù)傳、秒傳實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07java按照模板導(dǎo)出pdf或word文件詳細(xì)代碼
有時候業(yè)務(wù)中我們需要使用pdf模板生成一份pdf文件,下面這篇文章主要給大家介紹了關(guān)于java按照模板導(dǎo)出pdf或word文件的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-11-11Java8 實現(xiàn)stream將對象集合list中抽取屬性集合轉(zhuǎn)化為map或list
這篇文章主要介紹了Java8 實現(xiàn)stream將對象集合list中抽取屬性集合轉(zhuǎn)化為map或list的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02