spring常用註解使用解析

来源:http://www.cnblogs.com/intsmaze/archive/2016/02/28/5224661.html
-Advertisement-
Play Games

spring沒有採用約定優於配置的策略,spring要求顯示指定搜索哪些路徑下的Java文件。spring將會把合適的java類全部註冊成spring Bean。 問題:spring怎麼知道把哪些Java類當初bean類處理? 這就需要使用annotation,spring使用一些特殊的annota


spring沒有採用約定優於配置的策略,spring要求顯示指定搜索哪些路徑下的Java文件。spring將會把合適的java類全部註冊成spring Bean。

  問題:spring怎麼知道把哪些Java類當初bean類處理? 這就需要使用annotation,spring使用一些特殊的annotation來標註bean類。   @Component:標準一個普通的spring Bean類。 @Controller:標註一個控制器組件類。 @Service:標註一個業務邏輯組件類。 @Repository:標註一個DAO組件類。   Bean實例的名稱預設是Bean類的首字母小寫,其他部分不變。   在spring未來的版本中,@Controller,@Service,@Repository會攜帶更多語義。儘量考慮使用@Controller,@Service,@Repository代替通用的@Component。   指定了某些類可作為Spring Bean類使用後,最好還需要讓spring搜索指定路徑,此時需要在spring配置文件中導入context Schema,並指定一個簡單的搜索路徑。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!-- 自動掃描指定包及其子包下的所有Bean類 -->
<context:component-scan
base-package="org.crazyit.app.service"/>
</beans>
我們可以通過為<context:component-scan>添加<include-filter...>或<exclude-filter...>子元素來指定spring bean類,只要位於指定路徑下的java類滿足這種規則,即使這些java類沒有使用任何annotation標註,spring一樣會將他們當初bean類來處理。   <include-filter...>:滿足該規則的java類會被當初bean類處理。
<exclude-filter...>:指定滿足該規則的java類不會被當初bean類處理。
  這兩個子元素有兩個屬性: type:指定過濾器類型。 expression:指定過濾器所需要的表達式。   spring內建支持如下四種過濾器: annotation:該過濾器要指定一個annotation名,如lee.AnnotationTest。 assignable:類名過濾器,該過濾器直接指定一個java類。 regex:正則表達式過濾器,該過濾器指定一個正則表達式,匹配該正則表達式的java類將滿足該過濾規則,如org\.example\.default.*。 aspectj:如org.example..*service+。  
<!-- 自動掃描指定包及其子包下的所有Bean類 -->
<context:component-scan
base-package="org.crazyit.app.service">
<!-- 只將以Chinese、Axe結尾的類當成Spring容器中的Bean -->
<context:include-filter type="regex"
expression=".*Chinese"/>
<context:include-filter type="regex"
expression=".*Axe"/>
</context:component-scan>

 

 

@Resource位於java.annotation包下,來自於java EE規範的一個annotation。使用該annotation為目標bean指定協作者Bean。 @Resource詳細用法見經典javaEE企業應用實戰。
@Resource有一個name屬性,在預設情況下,spring將這個值解釋為需要被註入的Bean實例的名字。
 
@Controller
public class demo {
@Resource(name="user")
private User user;
@Resource(name="user")
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
}
@Resource也可以直接修飾Filed,
如果@Resource修飾Field,這時候連該屬性的setter方法就不需要了。   使用@Resource可以省略name屬性。
修飾方法時,省略name屬性,則該name值是該setter方法去掉前面的set字元串,首字母小寫後得到的子串。 修飾Field時,省略name屬性,則該name與該Field同名。   指定Bean實例的作用域。 @Scope:註解也可以指定Bean實例的作用域。
@Controller("demo")
@Scope("prototype")
public class demo {
 
}
  作用範圍就那4中填寫,不知道的等我博客,最近在回顧spring知識。   @PostConstruct和@PreDestory位於java.annotation包下。 在spring中用於定製spring容器中bean的生命周期行為。 @PostConstruct修飾的方法是bean的初始化之前的方法。
@PreDestory修飾的方法是bean銷毀之前的方法。     深刻理解該類使用了@PostConstruct修飾init方法,那麼spring就會在該bean的依賴關係註入完成之後回調該方法。
@Component
public class SteelAxe
{
public SteelAxe()
{
System.out.println("創建SteelAxe類對象實例...");
}
}
 
demo1:
@Component
public class Chinese
{
// 執行Field註入
@Resource(name="steelAxe")
private SteelAxe steeAxe;
 
public Chinese() {
    super();
System.out.println("創建Chinese類對象實例...");
}
@PostConstruct
public void init()
{
System.out.println("正在執行初始化的init方法...");
}
@PreDestroy
public void close()
{
System.out.println("正在執行銷毀之前的close方法...");
}
}
 
// 創建Spring容器
AbstractApplicationContext ctx = new
ClassPathXmlApplicationContext("beans.xml");
// 註冊關閉鉤子
ctx.registerShutdownHook();
列印: 創建Chinese類對象實例... 創建SteelAxe類對象實例... 正在執行初始化的init方法... 正在執行銷毀之前的close方法...   如果註釋掉chinese的依賴註入,那麼結果如下:
@Component
public class Chinese
{
// 執行Field註入
//@Resource(name="steelAxe")
//private SteelAxe steeAxe;    
public Chinese() {
super();
System.out.println("創建Chinese類對象實例...");
}
@PostConstruct
public void init()
{
System.out.println("正在執行初始化的init方法...");
}
@PreDestroy
public void close()
{
System.out.println("正在執行銷毀之前的close方法...");
}
}
列印: 創建Chinese類對象實例... 正在執行初始化的init方法... 創建SteelAxe類對象實例... 正在執行銷毀之前的close方法...
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對junit單元測試的報告:類似這樣的結果 ------------------------------------------------------- T E S T S ------------------------------------------------------- Runnin
  • 玩轉Windows服務系列彙總 [創建Windows服務][1] [Debug、Release版本的註冊和卸載及其原理][2] [無COM介面Windows服務啟動失敗原因及解決方案][3] [服務運行、停止流程淺析][4] [Windows服務小技巧][5] [命令行管理Windows服務][6]
  • Hadoop、Redis、Memcached、MongoDB、Spark、Storm、雲計算、R語言、機器學習、Nginx、Linux、MySQL、Java EE、.NET、PHP Memcached 視頻教程 大數據 高性能 集群 NoSQL 安裝 命令 使用
  • Hadoop、Redis、Memcached、MongoDB、Spark、Storm、雲計算、R語言、機器學習、Nginx、Linux、MySQL、Java EE、.NET、PHP MongoDB 權威 實戰 入門應用 視頻教程 大數據 高性能 集群 NoSQL
  • Hadoop、Redis、Memcached、MongoDB、Spark、Storm、雲計算、R語言、機器學習、Nginx、Linux、MySQL、Java EE、.NET、PHP R語言 視頻教程 實戰 數據分析 數據挖掘 入門編程 培訓 核心技術
  • 1.什麼叫做會話控制 允許伺服器根據客戶端做出的連續請求。 2.為什麼需要會話控制? 因為當你打開一個網站,並想訪問該網站的其他頁面的時候,如果沒有會話控制,當跳轉到其他頁面的 時候,就需要再次輸入賬戶和密碼。 3.Cookie的原理和作用 將客戶端的簡單信息保存在個人PC中,其他程式獲取PC的Co
  • java同步容器 在Java的集合容器框架中,主要有四大類別:List、Set、Queue、Map。List、Set、Queue介面分別繼承了Collection介面,Map本身是一個介面。註意Collection和Map是一個頂層介面,而List、Set、Queue則繼承了Collection介面
  • 1 YUV2RGB的模塊如下: 1 module yuv2rgb( 2 clk, //時鐘輸入 3 rstn, //複位輸入,低電平複位 4 5 y_in, //變換前Y分量輸出 6 cb_in, //變換前Cb分量輸出 7 cr_in, //變換前Cr分量輸出 8 ena_in, //待變換數據使
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...