1. 程式人生 > >註解@PostConstruct與@PreDestroy講解及例項

註解@PostConstruct與@PreDestroy講解及例項

從Java EE 5規範開始,Servlet中增加了兩個影響Servlet生命週期的註解(Annotion);@PostConstruct和@PreDestroy。這兩個註解被用來修飾一個非靜態的void()方法 。寫法有如下兩種方式:

@PostConstruct

Public void someMethod() {}
                                                                                    
或者

public @PostConstruct void someMethod(){}

    被@PostConstruct修飾的方法會在伺服器載入Servle的時候執行,並且只會被伺服器執行一次。PostConstruct在建構函式之後執行,init()方法之前執行。PreDestroy()方法在destroy()方法執行執行之後執行

被註解的Servlet生命週期

    需要注意的是,註解會多多少少地影響到伺服器的啟動速度。伺服器在啟動時候會遍歷Web 應用的WEB-INF/classes下的所有class檔案與WEB-INF/lib下的所有jar檔案,以檢查哪些類使用了註解。如果應用程式中沒有 使用任何註解,可以在Web.xml中設定的metadata-complete屬性為true.(支援@PostConstruct和 @PreDestroy的伺服器需要支援Servlet2.5規範。Tomcat5.x僅支援Servlet2.4規範。)

我現在要說的是用例項說明它有什麼作用。

比如說我有一種情況,在我的servlet初始化載入之前我想處理一些東西,像載入快取等等。

怎麼做。@PostConstruct就派上用場了。那為什麼這玩意用的不多呢,這是因為如果初始化之前我們要載入或處理某些玩意完全可以在構造器初始化時就處理了,但這種方法需要自己重寫構造器。好吧。直接上程式碼看看具體用它的時候怎麼做的。

package com.whaty.products.whatysns.web.info;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import com.whaty.framework.cache.core.model.Cache;
import com.whaty.framework.cache.core.service.CacheService;
import com.whaty.framework.cache.entitycache.service.EntityCacheHelper;
import com.whaty.framework.cache.entitycache.service.IEntityDaoAdapter;

/**
 * @author bc_qi
 * @param <KEY>
 * @param <ENTITY>
 */
@Service("AjaxCacheableService")
public class AjaxCacheableService{
	
	@Resource(name="cacheService")
	protected CacheService cacheService;
	
	protected boolean useReadWriteEntityDao = false;
    protected boolean useCache = true;
    protected int entityCacheMaxSize = 1000;
    protected int entityCacheMaxLiveSeconds = 3600;
    protected Cache entityCache;
	
	
	/**
	 * 構造方法執行後,初始化,
	 */
	@PostConstruct
	public void init() {
		Assert.notNull(cacheService, "cacheService must be set!");
		getCache();
	}

	/**
	 * 獲取cache
	 * @return
	 */
	protected Cache getCache() {
		if (entityCache == null) {
			entityCache = cacheService.addCache(this.getClass().getName(),entityCacheMaxLiveSeconds);
		}
		return entityCache;
	}
	
	/**
	 * @param id
	 * @param useCache 是否使用Cache
	 * @return
	 */
	public Object getCache(String id) {
		String strid = String.valueOf(id);
        Object o = entityCache.get(strid);
        return  o;
    }
    
	public Object putCache(int tTLSeconds,String cacheId,Object value) {
		String strid = String.valueOf(cacheId);
        Object o = entityCache.get(strid);
        if (o != null) {
            return  o;
        } else {
            entityCache.put(strid, value, tTLSeconds);
            return value;
        }
    }
	
}


相關推薦

註解@PostConstruct@PreDestroy講解例項

從Java EE 5規範開始,Servlet中增加了兩個影響Servlet生命週期的註解(Annotion);@PostConstruct和@PreDestroy。這兩個註解被用來修飾一個非靜態的void()方法 。寫法有如下兩種方式: @PostConstruct

註解@PostConstruct@PreDestroy

從Java EE 5規範開始,Servlet中增加了兩個影響Servlet生命週期的註解(Annotion);@PostConstruct和@PreDestroy。這兩個註解被用來修飾一個非靜態的void()方法 。寫法有如下兩種方式: @PostConstruct

TensorFlow之TFRecords檔案的儲存讀取講解程式碼實現

先聊一下tfrecord, 這是一種將影象資料和標籤放在一起的二進位制檔案,能更好的利用記憶體,TFRecords是TensorFlow中的設計的一種內建的檔案格式,優點有如下幾種:統一不同輸入檔案的框架它是更好的利用記憶體,更方便複製和移動(TFRecord壓縮的二進位制檔

Spring學習總結(25)——註解@PostConstruct和@PreDestroy使用總結

@PostConstruct 和 @PreDestroy這兩個都是方法的註解,將註解標註在方法上,該方法就能夠在應用啟動和銷燬時執行,@PostConstruct 註解標註的函式,是在類執行完建構函式之

Scrapy簡單入門例項講解安裝

Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 其可以應用在資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取API所返回的資料(例如 Amazon Associate

OozieCoordinator調度講解系統時區配置定時觸發兩種配置方式

-- track eno star es2017 alt coo 之前 res 1:修改本地linux時區 查看時區 - 號代表西 + 號 代表東 北京時間是東八區 設置時區的配置文件所在位置 1 cd /usr/share/zoneinfo/

@PostConstruct和@PreDestroy註解

void stc des 異常 聲明 服務 多次 一個 徹底 使用netty框架的時候,會用到sharable對ChannelHandler進行註解, 被註解的ChannelHandler對應的同一個實例可以被加入到一個或者多個ChannelPipelines一次或者多次,

Python使用CtypesC/C++ DLL檔案通訊過程介紹例項分析

專案中可能會經常用到第三方庫,主要是出於程式效率考慮和節約開發時間避免重複造輪子。無論第三方庫開源與否,程式語言是否與當前專案一致,我們最終的目的是在當前程式設計環境中呼叫庫中的方法並得到結果或者藉助庫中的模組實現某種功能。這個過程會牽涉到很多東西,本篇文章將簡要的介紹一下該過程的一些問題。 1.背景 多

IO流學習筆記(二)之BufferedWriterBufferedReader例項Demo

在之前的學習筆記(http://blog.csdn.net/megustas_jjc/article/details/72853059)中,FileWriter與FileReader的Demo使用的中轉資料buf實際就是緩衝區,是由我們自己建立的。 緩衝區可以提高效率,Java對緩衝區進行了封裝,封裝成了物

scrapy簡單入門例項講解(一)

初識Scrapy Scrapy是一個用於Web網站抓取的應用框架,輸出的結構化資料可以廣泛用於各類程式,比如:資料探勘、資料處理、資料存檔等 儘管Scrapy是為Web抓取設計的,但也可以用於從API中提取資料 通過一個例項認識spider 為了快速認識S

Spring AOP註解通過@Autowired,@Resource,@Qualifier,@PostConstruct,@PreDestroy注入屬性的

本文介紹了使用spring註解注入屬性的方法。 使用註解以前,注入屬性通過類以及配置檔案來實現。現在,注入屬性可以通過引入@Autowired註解,或者@Resource,@Qualifier,@PostConstruct,@PreDestroy等註解來實現。 使用註解以前我們是怎樣注入屬性的 類的實現

Scrapy簡單入門例項講解

Scrapy是一個為了爬取網站資料,提取結構性資料而編寫的應用框架。 其可以應用在資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了頁面抓取 (更確切來說, 網路抓取 )所設計的, 也可以應用在獲取API所返回的資料(例如 Amazon Associa

數位電路器件——閘電路——閘電路、或閘電路、非閘電路例項

閘電路是數位電路中最基本的邏輯單元。它可以使輸出訊號與輸入訊號之間產生一定的邏輯關係。在數位電路中,訊號大都是用電位(電平)高低兩種狀態表示,利用閘電路的邏輯關係可以實現對訊號的轉換。 最基本的閘電路有與閘電路,或閘電路,非閘電路等。   與閘電路 與閘電路

樸素貝葉斯分類器原理應用、EM演算法原理例項

文章目錄 貝葉斯定理與概率論中相關概念 屬性條件獨立性假設 樸素貝葉斯分類器 樸素貝葉斯分類器公式 離散屬性與連續屬性值的分別處理 樸素貝葉斯分類器例項 拉普拉斯修正 樸素貝葉斯分類器的應用:貝葉斯垃圾郵件

InitializingBean,DisposableBean ,PostConstructPreDestroy作用執行順序

package com.springmvc.entity; import org.hibernate.validator.constraints.Length; import org.springframework.beans.factory.DisposableBean;

靜態黑洞路由應用例項講解

黑洞路由:主要是指指向null介面的路由,null介面是一個虛擬的介面 無法被配置ip地址,轉發到該介面上的資料包都會被丟掉,所以對於所 有可能因為中斷故障產生路由迴路的路由都加上一條黑洞路由。 例如在配置有預設路由的環境中如果該路由器中的某一個路由項因為故障 中斷,那麼很

Spring註解之 @PostConstruct和 @PreDestroy

在工作中你不得不承認有千奇百怪的需求,比如今天讓你新增這,而明天讓你刪除那的。我對spring中bean生命週期的理解還是源於兩年前公司做的一個外包專案。那是真還是迷迷糊糊不懂。。。真是不懂spring中的大愛,大智慧。。,在此啪啪暗自打臉。 下面介紹一對cp @PostC

MQ訊息佇列--RabbitMQ整合Spring理論例項講解

今天Boss叫我去他的小黑屋分配任務,出門就記得倆詞“MQ”、“訊息佇列”。從來都沒聽說過這讓我怎麼搞?對於這種情況我慣有的方法論就是:先搞清楚它是什麼、有什麼用、有什麼工具可用、怎麼用,然後就是……擼起袖子使勁幹吧! 1、什麼是訊息佇列 訊息是指在兩個

Mybatis 入門之resultMapresultType講解例項

resultMap:適合使用返回值是自定義實體類的情況 resultType:適合使用返回值得資料型別是非自定義的,即jdk的提供的型別 resultMap :  對映實體類的資料型別 resultMap的唯一標識 column: 庫表的欄位名 propert

ndk開發中的Android.mk檔案Application.mk詳解例項

Android.mk檔案的作用: An Android.mk file is written to describe your sources to the build system. 中文意思是:寫一個Android.mk檔案是為了向生成系統描述你的原始碼。