問題描述:在springboot項(xiàng)目中集成quartz時(shí),需要使用到一個(gè)import org.springframework.scheduling.quartz.SchedulerFactoryBean這個(gè)類,并需要自動(dòng)注入,在測(cè)試代碼時(shí),發(fā)現(xiàn)無法注入到普通.class文件中,后臺(tái)報(bào)錯(cuò)提示:空指針異常。通過斷電調(diào)試,發(fā)現(xiàn)時(shí)SchedulerFactoryBean這個(gè)類為NULL。

問題解決方案:

1.根據(jù)springboot 框架的注入方式檢查,@Autowired 注解正確,因?yàn)橐玫目蚣鼙旧淼念悾恍枰赟chedulerFactoryBean類文件上加上@Component,所以本身沒錯(cuò)。

2.采用另外的方式進(jìn)行解決:

@Autowired
 private SchedulerFactoryBean schedulerFactoryBean;
    
 private static QuartzManager quartzManager;
    
 /**
  * 通過@PostConstruct實(shí)現(xiàn)初始化bean之前進(jìn)行的操作
  * @desc 初始化操作,得到QuartzManager實(shí)例
  * @Date 2019年1月7日
  */
 @PostConstruct 
 public void init() {  
      quartzManager = this;  
      quartzManager.schedulerFactoryBean = this.schedulerFactoryBean;        
}

其中 QuartzManager 類就是該類本身,通過“quartzManager = this;  ”可以看出來。以后使用“schedulerFactoryBean” 就直接用“quartzManager.schedulerFactoryBean”來代替。

 

這個(gè)解決方案的原理還不甚理解,但是可以獲取到對(duì)象。嘗試過將該種寫法放在abstract class 類文件中,結(jié)果是無效的,不能解決,所以這種寫法我初步認(rèn)為只能解決普通類的注入問題,緣由還待深究。