ssm項目中bean注入失敗,獲取spring中指定bean之解決方案


在項目開發中遇到一個問題,項目中使用了一個開源項目Quartz

(Quartz是一個完全由Java編寫的開源作業調度框架,為在Java應用程序中進行作業調度提供了簡單卻強大的機制。Quartz允許開發人員根據時間間隔來調度作業。這是百度的)。

具體業務就是在特定的時間去操作數據,但是這個時間屬性是由前台傳遞給后台的。

因此在Quartz的實現類在特定的時間需要使用Service接口,來修改數據庫的數值,

 

因此一開始我在Quartz的實現類中直接使用了@AUTOWIRED來進行注入;

不過測試了幾次之后發現,注入的serviceimpl都報了空指針錯誤!也就是說並沒有將service的實現成功注入;

后來一想,因為我調用Quartz的實現的時候是通過他的框架來進行工作;

接口提供的方法是傳遞Quartz的實現的CLASS,所以Quartz實現類的對象在內存中應該是不受Spring控制的,所以其中調用的service接口也不受spring控制,故此注入失敗,

 

解決方法1:

    加入一個springBean管理工具:

package com.lewkay.demo.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

import java.util.Map;

/**
 * Spring bean獲取工具類
 * Created by lk on 2017/2/16.
 */
public class SpringBeanFactoryUtils implements ApplicationContextAware {

    private static ApplicationContext applicationContext;


    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

    /**
     * 獲取applicationContext對象
     * @return
     */
    public static ApplicationContext getApplicationContext(){
        return applicationContext;
    }

    /**
     * 根據bean的id來查找對象
     * @param id
     * @return
     */
    public static Object getBeanById(String id){
        return applicationContext.getBean(id);
    }

    /**
     * 根據bean的class來查找對象
     * @param c
     * @return
     */
    public static Object getBeanByClass(Class c){
        return applicationContext.getBean(c);
    }

    /**
     * 根據bean的class來查找所有的對象(包括子類)
     * @param c
     * @return
     */
    public static Map getBeansByClass(Class c){
        return applicationContext.getBeansOfType(c);
    }
}

  后面,在任何不受spring管理的類中都可以使用此工具獲取受spring管理的bean了

寫的比較水,見諒!

 


免責聲明!

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



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