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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...