spring註解簡介

来源:http://www.cnblogs.com/understander/archive/2016/10/16/5942700.html
-Advertisement-
Play Games

spring 註解多選擇是好事嘛? Spring 經過十多年的快速發展和更新,以其獨特的創新帶來了大量的擁躉者,在選擇方面還帶來了更多選擇!譬如spring bean的裝配(在XML中進行顯式配置、在Java中進行顯式配置、隱式的bean發現機制和自動裝配),註解的多元化(基本註解、jsr250、j ...


spring 註解


多選擇是好事嘛?

Spring 經過十多年的快速發展和更新,以其獨特的創新帶來了大量的擁躉者,在選擇方面還帶來了更多選擇!譬如spring bean的裝配(在XML中進行顯式配置、在Java中進行顯式配置、隱式的bean發現機制和自動裝配),註解的多元化(基本註解、jsr250、jsr330)等等!

而這麼多重覆的選擇難道真的是好事嗎?這是否也以為學習與成本提高,掌握的難度加大?
打個比喻:同樣可以救國,某個叫spring的神經病告訴你可以從醫救國(xml顯式配置),當你學醫正酣的時候,它又告訴你還可以從軍救國(Java顯示配置),當你練習擒拿射擊快要成功的時候,它來告訴你,其實有更簡單的方法可以教育救國(bean的自動裝配)!
作為一個初學者,個人認為,從學 servlet 到 jsp 再到 struts 到現在的 spring ,坑是越挖越大越挖越多啊!

 

廢話不多說了,下麵來介紹幾個簡單的註解:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@Autowired註解:實現自動裝配。
1.在 spring xml 配置文件中需要註入如下兩個類:
    <beans>
        <bean id="testA" class="..../TestA" />
        <bean id="testUtil" class="..../TestUtil" />
    </beans>
2.若想要在 testUtil 類中裝配 testA 類,則可以在 testUtil 類中使用@Autowired註解;
如果想將 TestA 註入到 TestUtil 中,代碼如下:
    public class TestUtil{
        @Autowired
        private Test testA;
        .......
    }
簡單來說,自動裝配就是讓Spring自動滿足bean依賴的一種方法,在滿足依賴的過程中,會在Spring應用上下文中尋找匹配某個bean需求的其他bean。
@Autowired註解不僅能夠用在構造器上,還能用在方法上,和屬性上。如果沒有匹配的bean,那麼在應用上下文創建的時候,Spring會拋出一個異常。為了避免異常的出現,你可以將@Autowired的required屬性設置為false:但是,把required屬性設置為false時,你需要謹慎對待。如果在你的代碼中沒有進行null檢查的話,這個處於未裝配狀態的屬性有可能會出現NullPointerException。
@Autowired他是spring特有的註解,如果你不願意在代碼中到處使用Spring的特定註解來完成自動裝配任務的話,那麼你可以考慮將其替換為@Inject。
在自動裝配中,Spring同時支持@Inject(JSR330註解)和@Autowired。儘管@Inject和@Autowired之間有著一些細微的差別,但是在大多數場景下,它們都是可以互相替換的。
註意:1.它只是提供自動裝配,並不提供註入;而註入是前提。
            2. 若要實現自動裝配還需要導入<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>支持
    或者也可以使用<context:annotation-config />    
    
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

@Qualifier註解:對依賴註入的條件進行限制。
如果@Autowired標註的依賴在容器中只能找到一個實例與之對應,則萬事OK,但是如果存在多個同意類型的對象實例,則 @Qualifier 註解將其作用。
假如 Test 類有兩個實現,TestA 和 TestB,在 spring 配置文件中配置代碼如下:
    <beans>
        <bean id="testA" class="..../TestA" />
        <bean id="testB" class="..../TestB" />
        <bean id="testUtil" class="..../TestUtil" />
    </beans>
如果想將 TestA 註入到 TestUtil 中,代碼如下:
    public class TestUtil{
        @Autowired
        @Qualifier("testA")
        private Test testA;
        private Test testB;
        .......
    }

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@Resource(name=“”)註解:實現對 bean 的註入。它的作用與@Autowired註解類似。
1.由於該註解是由JSR250引入的,故而在使用它之前需要導入jsr250相關jar包的支持,在pom.xml文件中加入以下內容:
        <!-- jsr250註解包的引入 -->
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>jsr250-api</artifactId>
            <version>1.0</version>
        </dependency>
2.在spring配置文件中註入相關類:
    假如 testUtil 類中需要引入 testA 類,在 spring 配置文件中配置代碼如下:
    <beans>
        <bean id="testA" class="..../TestA" />
        <bean id="testUtil" class="..../TestUtil" />
    </beans>
3.在 testUtil 中加入 @Resource(name=“”)註解:
如果想將 TestA 註入到 TestUtil 中,代碼如下:
    public class TestUtil{
        @Resource(name=“testA”)
        private Test testA;
        private Test testB;
        .......
    }
註意:@Resource(name=“”) 中的name 為指定要註入的對象,testA 為 spring 配置文件中所定義 bean 的id。
4.以下兩個解釋註解的包至少要引入一個到 spring 配置文件,本著偷懶的原則,個人喜歡 context 元素。
<context:annotation-config />    
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
    
備註:JSR250註解有 @PostConstruct,@PreDestroy 。
             JSR330註解有 @Inject (代替 @AutoWired)、@Named (代替 @Component)

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

@ComponentScan(basePackages=“×××××”)註解:啟用組件掃描基礎包。
1.在 spring 配置文件中加入 <context:component-scan>實現。
<context:component-scan base-package="com.lh" />
配置完成後,<context:component-scan>會掃描 com.lh 路徑下的所有標註了的相應註解的類,並添加到IOC容器中,實現依賴註入。
備註:加入該元素後,就不需要再向 spring 配置文件中註入相關的類,即不需要再使用如下配置:
    <beans>
        <bean id="testA" class="..../TestA" />
        <bean id="testUtil" class="..../TestUtil" />
    </beans>
2.<context:component-scan> 預設掃描的註解類型是 @Component ,所以需要在相應的類中應用這個註解進行標註。
    @Component
    public class TestUtil{
            @Autowired
            private Test testA;
            .......
        }

    @Component
    public class TestA{
    private int a;
    private String ss;
    ...
    }
備註:(1)需要在兩個類中都標註 @Component 註解。
             (2)該註解是類級別的,它添加在類之上。
             (3)@Component("id號")註解:表明該類會作為組件類,並告知Spring要為這個類創建bean。若id號為空,則預設使用以小寫開頭的類名!若使用自定義id號,則在後續的引用中需要引入以該id為標記。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Collection類的層次結構圖(來源與網路)如下所示: Collection層次結構中的根介面。Collection 表示一組對象,這些對象也稱為 collection 的元素。一些 collection 允許有重覆的元素(如List,Queue),而另一些則不允許(如Set)。一些 colle ...
  • 按鈕圖形化,只需創建一個ImageIcon對象,將圖形路徑賦予ImageIcon對象,然後將該對象傳遞給按鈕即可。在此過程中涉及eclipse中圖形的路徑設置,包括(項目路徑下、非項目路徑下、相對路徑、絕對路徑),相對路徑前不加/,此處相對路徑是相對於eclipse中項目文件夾而言的,絕對路徑為圖形... ...
  • 1、URL重寫,隱藏網址中的Index.php。 ThinkPHP 作為 PHP 框架,是單一入口的,那麼其原始的 URL 便不是那麼友好。但 ThinkPHP提供了各種機制來定製需要的 URL 格式,配合 Apache .htaccess 文件,更是可以定製出人性化的更利於 SEO 的URL 地址 ...
  • 在 servlet 3.0 開始web項目可以完全不需要web.xml配置文件了,所以本文的配置只在支持servlet 3.0及以上的web容器中有效 使用的是spring mvc (4.3.2.RELEASE) + thymeleaf(3.0.2.RELEASE), 持久層使用的 spring的 ...
  • 【Python練習題 017】 兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比。請編程式找出三隊賽手的名單。 這題真真想破我腦袋了,看了好幾份別人的代碼才勉強看懂,真是…… 一開始我只想著先 ...
  • ************************** ...
  • 上周開始試著來用appium,首先開始去官網看,然後下載appium客戶端,下載安裝後,然後筆者開始安裝android sdk ,進官網下載後,筆者下載安裝後,在更新下載SDK Manager的時候一直出錯,下載不下來,翻牆也不行,來到蟲師博客 ,看到方式後,就試著去做,可是按照蟲師的方式還是不行, ...
  • 首先,我們準備文件 jdbc.properties,用於保存連接資料庫的信息,利於我們在配置文件中的使用 一:Spring框架內置的連接池(內置jar包可以使用) 當然,它是使用到 spring-jdbc-4.2.0.RELEASE.jar 在applicationContext.xml(Sprin ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...