注解 @PostConstruct 與 @PreDestroy 詳解及實例

簡介

?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

?

Java EE5 引入了@PostConstruct和@PreDestroy這兩個作用于Servlet生命周期的注解,實現Bean初始化之前和銷毀之前的自定義操作。此文主要說明@PostConstruct。

API使用說明

以下為@PostConstruct的API使用說明:

1. PostConstruct 注釋用于在依賴關系注入完成之后需要執行的方法上,以執行任何初始化。

2. 此方法必須在將類放入服務之前調用。

3. 支持依賴關系注入的所有類都必須支持此注釋。

4. 即使類沒有請求注入任何資源,用 PostConstruct 注釋的方法也必須被調用。

5. 只有一個方法可以用此注釋進行注釋。

?

6. 應用 PostConstruct 注釋的方法必須遵守以下所有標準:

該方法不得有任何參數,

除非是在 EJB 攔截器 (interceptor) 的情況下,根據 EJB 規范的定義,在這種情況下它將帶有一個 InvocationContext 對象 該方法的返回類型必須為 void;該方法不得拋出已檢查異常;

應用 PostConstruct 的方法可以是 public、protected、package private 或 private;

除了應用程序客戶端之外,該方法不能是 static;

該方法可以是 final;如果該方法拋出未檢查異常,那么不得將類放入服務中,除非是能夠處理異常并可從中恢復的 EJB。

總結為一下幾點:

  • 只有一個方法可以使用此注釋進行注解;
  • 被注解方法不得有任何參數;
  • 被注解方法返回值為void;
  • 被注解方法不得拋出已檢查異常;
  • 被注解方法需是非靜態方法;
  • 此方法只會被執行一次;

Servlet執行流程圖

兩個注解加入只會,Servlet執行流程圖:?
這里寫圖片描述

在具體Bean的實例化過程中,@PostConstruct注釋的方法,會在構造方法之后,init方法之前進行調用。

實例

基于Spring boot編寫的可執行方法見github:https://github.com/HappySecondBrother/example?
UserService方法(提供緩存數據):

package com.secbro.service;import org.springframework.stereotype.Service;import java.util.ArrayList;
import java.util.List;/*** @author 二師兄* @date 2016/8/10*/
@Service
public class UserService {public List<String> getUser(){List<String> list = new ArrayList<>();list.add("張三");list.add("李四");return list;}
}

BusinessService方法,通過@PostConstruct調用UserService:

package com.secbro.service;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;
import java.util.List;/*** @author 二師兄* @date 2016/8/10*/
@Service
public class BusinessService {@Autowiredprivate UserService userService;private List<String> list = null;/*** 構造方法執行之后,調用此方法*/@PostConstructpublic void init(){System.out.println("@PostConstruct方法被調用");// 實例化類之前緩存獲得用戶信息List<String> list = userService.getUser();this.list = list;if(list != null && !list.isEmpty()){for(String user : list){System.out.println("用戶:" + user);}}}public BusinessService(){System.out.println("構造方法被調用");}public List<String> getList() {return list;}public void setList(List<String> list) {this.list = list;}
}

執行結果:

構造方法被調用
@PostConstruct方法被調用
用戶:張三
用戶:李四

項目應用

在項目中@PostConstruct主要應用場景是在初始化Servlet時加載一些緩存數據等。

注意事項

使用此注解時會影響到服務的啟動時間。服務器在啟動時會掃描WEB-INF/classes的所有文件和WEB-INF/lib下的所有jar包。

?

-------------------------------------------------- 我是分隔線? ----------------------------------------------------------------

?

關于在 spring ?容器初始化 bean 和銷毀前所做的操作定義方式有三種:

第一種:通過 @PostConstruct 和 @PreDestroy 方法 實現初始化和銷毀 bean 之前進行的操作

第二種:通過 在 xml 中定義 init-method 和 ?destory-method 方法

第三種:?通過 bean 實現 InitializingBean 和 DisposableBean 接口

?

轉自:https://blog.csdn.net/topwqp/article/details/8681497

? ? ? ? ? ?https://blog.csdn.net/wo541075754/article/details/52174900

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448841.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448841.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448841.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

別讓6種不良心理偷走你的好人緣

眾所周知&#xff0c;擁有正常、健康的交際圈對于人的身心健康都是很有幫助的。但是若想維系好自己的交際圈&#xff0c;也是很不容易的&#xff0c;甚至在不經意間產生的某些心理&#xff0c;就會直接給大家的人際交往帶來影響。那么接下來&#xff0c;小編就先為大家歸納一下…

PHP 安裝xdebug

xdebug官網: https://xdebug.org 安裝步驟如下: 使用 phpinfo() 打印出PHP相關信息, 全選, 復制 打開 xdebug 網站: https://xdebug.org/wizard.php 在圖中輸入框中粘貼你復制的信息, 點擊 Analyse my phpinfo() output 在結果中點擊下載, 然后按照它提示的步驟進行操作即可…

apt-clone:備份已安裝的軟件包并在新的 Ubuntu 系統上恢復它們

當我們在基于 Ubuntu/Debian 的系統上使用 apt-clone&#xff0c;包安裝會變得更加容易。如果你需要在少量系統上安裝相同的軟件包時&#xff0c;apt-clone 會適合你。 如果你想在每個系統上手動構建和安裝必要的軟件包&#xff0c;這是一個耗時的過程。它可以通過多種方式實現…

分布式消息中間件 : Rocketmq

簡述 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 分布式消息中間件&#xff0c;主要是實現分布式系統中解耦、異步消息、流量銷鋒、日志處理等場景。生產中用的最多的消息隊…

PV、UV、UIP、VV、CPC、CPM、RPM、CTR指的是什么?

PV(PageView)&#xff1a;網站瀏覽量&#xff0c;指頁面的瀏覽次數&#xff0c;用以衡量網站用戶訪問的網頁數量。用戶沒打開一個頁面便記錄1次PV&#xff0c;多次打開同一頁面則瀏覽量累計&#xff1b;UV(UniqueVistor)&#xff1a;獨立訪客數&#xff0c;指1天內訪問某站點的…

linux opencl(AMD) Example

最近對并行計算很感興趣。不過搞MPI對我來說暫時沒什么用&#xff0c;基于GPU的并行計算倒是挺實用。網上的資料都是CUDA的。實質上我對CUDA一點興趣都沒有。無論別人的架構多么先進&#xff0c;我這個只有AMD顯卡的小孩都是旁觀者而已。在這里記錄一下一個opencl程序的編譯過程…

php使用supervisor管理進程腳本

supervisor是用python開發的一個在linux系統下的進程管理工具&#xff0c;可以方便的監聽&#xff0c;啟動&#xff0c;停止一個或多個進程。當一個進程被意外殺死后&#xff0c;supervisor監聽到后&#xff0c;會自動重新拉起進程。 一、supervisor的安裝 1、通過easy_install…

重寫規則和重載規則

重寫規則&#xff1a; 發生在有繼承關系的類之間&#xff08;同一類就是重載了&#xff09;相同的方法名&#xff0c;參數列表&#xff0c;返回類型可見性&#xff08;public,protected,private&#xff09;不能被縮小異常不能被放大規則與c中不一樣靜態類型不能被重寫方法重載…

消息中間件:RocketMQ 介紹(特性、術語、原理、優缺點、消息順序、消息重復)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 消息中間件的作用 1. 應用解耦 2. 異步處理 比如用戶注冊場景&#xff0c;注冊主流程完成以后&#xff0c;需要調用郵件系統發送郵件…

C# JsonHelper類

記錄一下&#xff0c;方便下次用。 public class JsonHelper{#region Json/// <summary>/// JavaScriptSerializer/// </summary>/// <typeparam name"T"></typeparam>/// <param name"obj"></param>/// <returns&…

[譯】Redux入門教程(一)

前言 老外寫技術文章真是叼&#xff0c;這是國外的一個程序員寫的一個簡單易懂,循序漸進的Redux教程&#xff0c;本著共享的精神&#xff0c;就翻譯出來給大家一起看&#xff0c;文章最后有鏈接&#xff0c;不想看我翻譯的直接去看原文吧。 下面是原教程的英文目錄 這篇先更三分…

使用 Intellij Idea 打包 java 工程為可執行 jar 包

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 其實還有個簡單多了方法&#xff0c;見&#xff1a; 超簡單方法&#xff1a; Intellij Idea 把 java 工程打成可運行的 jar 步驟&#x…

QuickStart系列:docker部署之Gitlab本地代碼倉庫

gitlab是可以在本地搭建的使用git作為源代碼管理的倉庫。 運行環境&#xff1a; win10vmware14docker7docker 1. 使用命令拉取鏡像&#xff08;非必須&#xff0c;耗時比較久&#xff0c;這里以ce為準&#xff0c;ce是社區版&#xff0c;ee是企業版&#xff09;&#xff1a; do…

超簡單方法: Intellij Idea 把 java 工程打成可運行的 jar

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 找到 Intellij Idea 最下面的 Terminal 選項&#xff0c;并點擊進入該界面。 2. 在光標位置輸入命令&#xff1a;mvn clean 。清理…

LDAP-輕量級目錄訪問協議(統一認證)

概念 LDAP是輕量目錄訪問協議&#xff0c;英文全稱是Lightweight Directory Access Protocol&#xff0c;一般都簡稱為LDAP。 參考資料 LDAP概念和原理介紹 我花了一個五一終于搞懂了OpenLDAP LDAP-Apache Directory Studio使用&#xff08;創建DC.OU及用戶&#xff09; 轉載于…

kafka集群搭建(消息)

1、Kafka使用背景在我們大量使用分布式數據庫、分布式計算集群的時候&#xff0c;是否會遇到這樣的一些問題&#xff1a;我們想分析下用戶行為&#xff08;pageviews&#xff09;&#xff0c;以便我們設計出更好的廣告位我想對用戶的搜索關鍵詞進行統計&#xff0c;分析出當前的…

[轉]在Windows 下使用OpenCL

目前&#xff0c;NVIDIA和AMD的Windows driver均有支援OpenCL&#xff08;NVIDIA的正式版driver是從195.62版開始&#xff0c;而AMD則是從9.11版開始&#xff09;。NVIDIA的正式版driver中包含OpenCL.dll&#xff0c;因此可以直接使用。AMD到目前為止&#xff0c;則仍需要安裝其…

docker 之 Dockerfile 實踐

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 上一篇介紹了Dockerfile中使用的指令&#xff0c;現在開始進行指令實踐 先查看下本地的鏡像&#xff0c;選一個作為base image&#xf…

tomcat啟動后命令行日志中文亂碼

這是日志的編碼設置和窗體的編碼格式不一致。 將 conf\logging.properties 文件中的 UTF-8 改成 GBK 重啟tomcat &#xff08;右鍵cmd標題欄部分&#xff0c;可以查看cmd屬性&#xff09; 轉載于:https://www.cnblogs.com/Echiops/p/10974587.html

Coursera機器學習筆記(一) - 監督學習vs無監督學習

轉載 http://daniellaah.github.io/2016/Machine-Learning-Andrew-Ng-My-Notes-Week-1-Introduction.html 一. 監督學習 什么是監督學習? 我們來看看維基百科中給出的定義: 監督式學習&#xff08;英語&#xff1a;Supervised learning&#xff09;&#xff0c;是一個機器學習…