基於註解的形式配置Bean

來源:互聯網
上載者:User

標籤:style   blog   color   io   os   使用   ar   java   strong   

基於註解的方式配置Bean:也就說我們在每個Bean的類名前面註解一下,Spring會自動幫我們掃描Bean放進IOC容器中


I基於註解的方式配置Bean(沒有依賴關係的Bean)有兩個步驟:

1組件掃描(component scanning):
     Spring 能夠從 classpath( 類路徑下,也就是Src檔案夾下)下自動掃描, 偵測和執行個體化具有特定註解的組件.
     特定組件包括: @Component: 基本註解, 標識了一個受 Spring 管理的組件
             @Respository: 建議標識在持久層組件(Model)
             @Service: 建議標識在服務層(業務層)組件
             @Controller: 建議標識在表現層組件(就是控制層) 對於掃描到的組件,
Spring 有預設的命名策略:使用非限定類名,第一個字母小寫(UserService-->userService
            也可以在註解中通過 value 屬性值標識組件的名稱 例如@Component("userService"),指定組件的名為userService

2在Spring設定檔裡配置掃描組件<component-scan>

  <component-scan>的屬性:1base-package 屬性指定一個需要掃描的基類包,Spring 容器將會掃描這個基類包裡及其子包中的所有類. 當需要掃描多個包時, 可以使用逗號分隔.
                  2resource-pattern: 屬性指定掃描特定的類(可以使用萬用字元),
                  3user-default-Filter:指定是否使用預設的過濾器。預設為TRUE
  <component-scan>的子節點:1<context:include-filter>(過濾器) 子節點表示要包含的目標類,與user-default-Filter配合使用
                  2<context:exclude-filter>(過濾器) 子節點表示要排除指定的目標類(也就是說指定的目標類將不被掃描)


具體實現步奏:
    1匯入Spring的AOP的jar包:spring-aop-4.0.0.RELEASE.jar

    2在Bean的類名前面添加註解:

    3在Spring的設定檔裡配置掃描組件:<context:component-scan>

II基於註解的方式配置Bean(具有依賴關係的Bean)
  實現原理:

  實際上<context:component-scan> 元素還會自動註冊 AutowiredAnnotationBeanPostProcessor 執行個體,
  該執行個體可以自動裝配具有 @Autowired 和 @Resource 、@Inject註解的屬性.(就是利用這個特點裝配依賴的Bean)
    屬性講解
        @Autowired 註解:1自動裝配具有相容類型的單個 Bean屬性
                   2構造器, 普通欄位(即使是非 public), 一切具有參數的方法都可以應用@Authwired 註解(自動去IOC容器去找,如果找到和註解類型相容(相同)的Bean就自動載入).
                   3 當 Spring 找不到匹配的 Bean 裝配屬性時, 會拋出異常,  可以設定 @Authwired 註解的 required 屬性為 false(required=falses時當IOC容器沒有註解的Bean,                    也一樣運行。不拋異常)
                   4 預設情況下, 當 IOC 容器裡存在多個類型相容的 Bean 時, 通過類型的自動裝配將無法工作. 此時可以在 @Qualifier 註解裡提供 Bean 的名稱.
                   5 @Authwired 註解也可以應用在數群組類型的屬性上, 此時 Spring 將會把所有匹配的 Bean 進行自動裝配.
                   [email protected] 註解也可以應用在集合屬性上, 此時 Spring 讀取該集合的類型資訊, 然後自動裝配所有與之相容的 Bean.
                   7 @Authwired 註解用在 java.util.Map 上時, 若該 Map 的索引值為 String, 那麼 Spring 將自動裝配與之 Map 實值型別相容的 Bean, 此時 Bean 的名稱作為索引值
       
         @Resource :註解要求提供一個 Bean 名稱的屬性,若該屬性為空白,則自動採用標註處的變數或方法名作為 Bean 的名稱
        
            @Inject    :@Inject 和 @Autowired 註解一樣也是按類型匹配注入的 Bean, 但沒有 reqired 屬性
所以一般建議使用@autowired

具體的實現流程:

    1建立有依賴關係Bean
     例如person依賴Eat,Eat依賴eatType

    2在引用依賴Bean的前面添加@Authwired註解
    例如person依賴Eat:

package control;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import model.Eat;@Componentpublic class person {    @Autowired    private Eat eat;    public Eat getEat() {        return eat;    }    public void setEat(Eat eat) {        this.eat = eat;    }    public void showPerson() {        System.out.println("Person................");        eat.eat(this);    }}

    3配置掃描組件:<context:component-scan>(預設值掃描一個包的,若想掃描多個包,用逗號分隔開):程式碼範例

<context:component-scan base-package="view,control,model"></context:component-scan>

 

 


    

 

 

基於註解的形式配置Bean

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.