spring@Aspect類@Autowired注入的bean為null 【轉發】


今天工作的時候需要做一個定時任務,在定時任務的job類中,需要調用之前的寫好邏輯的service的代碼。假設我的job類是MyJob,調用的service名稱是MyService。而MyService中需要用到注入另一個service,名稱是FlowService。

首先,這幾個類都要納入spring的管理,需要加上@Controller,@Service注解。我第一次就忘了在MyJob上面加注解了,所以不行。

同時因為我們調用的MyService需要注入其他的service,所以在MyJob類中不能通過new MyService()來調用其方法。原因是當我們這樣做的時候,我們得到的MyService的實例就不是spring管理的bean了,這樣的話,注入FlowService的時候是不會成功的,一直會是null。因此我們需要在MyJob中也通過@Autowired注解來注入MyService。但是當我這樣做了之后,調試代碼的時候,發現注入到MyJob中的MyService是null,這樣就連調用MyService的代碼都出錯了。后來通過查資料,看博客才知道找到了下面的解決辦法:

在MyJob中,添加一個構造方法,添加一個靜態變量,添加一個被@PostConstruct修飾的方法;具體代碼如下:

 

@Controller
public class MyJob implements Job {
    private static final Logger LOG = LoggerFactory
            .getLogger(MyJob.class);
 
    private static final Lock executelock = new ReentrantLock(true);
    
    @Autowired
    private MyService myService;
    
    public static MyJob myJob ;
    public MyJob (){
        
    }
    
    @PostConstruct
    public void init(){
        myJob =this;
    }
    
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        // TODO Auto-generated method stub
        if (executelock.tryLock()) {
            LOG.info("獲取【互斥鎖】,開始自動保存發送給工作人員的信息");
            try{
                myJob.myService.saveMsgSendBoxShouLiToMember();
            }catch(Exception e){
                System.out.println("執行失敗");
                LOG.error("自動保存發送給工作人員的信息任務發生異常:" + e);
            } finally {
                executelock.unlock();
                LOG.info("自動保存發送給工作人員的信息任務結束,釋放【互斥鎖】執行結束!");
            }
        } else {
            LOG.info("沒有獲取【互斥鎖】, 自動保存發送給工作人員的信息任務放棄本次執行!");
        }
        
    }
}
View Code

 

注意調用myservie的方法時,通過的myJob.myService.saveMsgSendBoxShouLiToMember();去調用

 

 

————————————————
版權聲明:本文為CSDN博主「zengdongwen」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zengdongwen/java/article/details/86528735


免責聲明!

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



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