加載

場景描述:

   有時我們需要在應用啓動時,加載某些不常變的數據到緩存中,避免每次請求時查詢數據庫或其它數據源,以提高性能(準備連接,建立連接,關閉連接,減少數據讀取的IO數).如果應用中剛好用到spring框架,正好可以用spring的機制實現這個功能

解決方案:

 1:寫一個類,實現BeanPostProcessor接口,這個接口有兩個方法。


      (1):postProcessBeforeInitialization方法,在spring中定義的bean初始化前調用這個方法
      (2):postProcessAfterInitialization方法,在spring中定義的bean初始化後調用這個方法


     例子代碼:
public class CacheBeanPostProcessor implements BeanPostProcessor {  


    @Override  
    public Object postProcessAfterInitialization(Object obj, String arg1) throws BeansException {  
        try {  
            if(obj instanceof ColumnService) {    
                ((ColumnService)obj).getColumnList();//加載欄目數據  
            }else if(obj instanceof TradeServiceImpl){  
                ((TradeServiceImpl)obj).getTradeList();//加載行業數據  
            }  
        } catch (Exception e) {  
             e.printStackTrace();  
        }   
                return obj;    
    }  


    @Override  
    public Object postProcessBeforeInitialization(Object arg0, String arg1)  
            throws BeansException {  
        // TODO Auto-generated method stub  
        return arg0;  
    }  

}  
         2:在spring的xml文件中,添加

               <!-- 初始緩存數據,初始化spring中定義的bean的前後都會用此實現類 -->
      <bean id="cacheBeanPostProcessor" class="com.guagua.cache.CacheBeanPostProcessor"/> 


        3:在加載數據後,數據存在什麼地方,由你來定,我這個例子是放到了一個“靜態變量中”
@Service("columnService")  
public class ColumnServiceImpl implements ColumnService {  

    public static List<Column> columnList = new ArrayList<Column>();  
    @Autowired  
    private ColumnDao columnDao;  

    public void setColumnDao(ColumnDao columnDao) {  
        this.columnDao = columnDao;  
    }  

    @Override  
    public List<Column> getColumnList() throws Exception {  
        columnList = columnDao.getColumnList();  
        return columnList;  
    }  
} 
發佈了52 篇原創文章 · 獲贊 29 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章