首頁  >  文章  >  类库下载  >  spring 註解

spring 註解

高洛峰
高洛峰原創
2016-10-17 09:19:121472瀏覽

多選擇是好事嘛?

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. 若要實現自動組裝也需要導入支援
    或也可使用    
   
----------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -----------------

@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 中,程式碼如下:
注意:@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 配置文件中加入 实现。
 
配置完成后,会扫描 com.lh 路径下的所有标注了的相应注解的类,并添加到IOC容器中,实现依赖注入。
备注:加入该元素后,就不需要再向 spring 配置文件中注入相关的类,即不需要再使用如下配置:

    <beans>
        <bean id="testA" class="..../TestA" />
        <bean id="testUtil" class="..../TestUtil" />
    </beans>

2. 默认扫描的注解类型是 @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为标记。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn