spring通過註解配置

又見藤蔓發表於2017-01-06

先講下知識點:

使用spring註解後需要在spring配置中配置掃描元件

在classpath中掃描元件
1元件掃描(component scanning):Spring能夠從classpath下自動掃描,偵測和例項化具有特定註解的元件
特定元件包括:
  @Component:基本註解,標識了一個受Spring管理的元件
  @Respository:標識持久層元件
  @Service:標識服務層(業務層)元件
  @Controller:標識表現層元件
對於掃描到的元件,Spring有預設的命名策略:使用非限定類名,第一個字母小寫,也可以在註解中通過value屬性值標識元件的名稱

當在元件類上使用了特定的註解之後,還需要在Spring的配置檔案中宣告<context:component-scan>:
-base-package屬性指定一個需要掃描的基類包,Spring容器將會掃描這個基類包及其包中的所有類
-當需要掃描多個包時,可以使用逗號分隔
-如果僅希望掃描特定的類而非基包下的所有類,可使用resource-pattern屬性過濾特定的類,例項:
<context:component-scan 
base-package="com.test.ceshi.beans"
resource-pattern="autowire/*.class"/>
-<context:include-filter>子節點表示要包含的目標類
-<context:exclude-filter>子節點表示要排除在外的目標類
-<context:component-scan>下可以擁有若干個<context:include-filter>和<context:exclude-filter>子節點


元件裝配
<context:component-scan>元素還會自動註冊AutowiredAnnotationBeanPostProcessor例項,該例項可以自動裝配具有@Autowired和@Resource、@Inject註解的屬性
使用@Autowired自動裝配Bean
@Autowired註解自動裝配具有相容型別的單個bean屬性
1 構造器,普通欄位(即使是非public),一切具有引數的方法都可以應用@Autowired註解
2 預設情況下,所有使用@Autowired註解的屬性都需要被設定,當Spring找不到匹配的bean裝配屬性時,會丟擲異常,若某一屬性允許不被設定,可以設定@Autowired註解的required屬性為false
3 預設情況下,當IOC容器裡存在多個型別相容的bean時,通過型別的自動裝配將無法工作,此時可以在@Qualifier註解裡提供bean的名稱,Spring允許對方法的入參標註@Qualifiter以指定注入bean的名稱
4 @Autowired註解也可以應用在陣列型別的屬性上,此時Spring將會把所有匹配的bean進行自動裝配
5 @Autowired註解也可以應用在集合屬性上,此時spring讀取該集合的型別資訊,然後自動裝配所有與之相容的bean
6 @Autowired註解用在java.util.Map上時,若該Map的鍵值為String,那麼Spring將會自動裝配與之Map值型別警容的bean,此時bean的名稱作為鍵值

使用@Resource或@Inject自動裝配bean
Spring還支援@Resource和@Inject註解,這兩個註解和@Autowired註解的功用類似
@Resource註解要求提供一個bean名稱的屬性,若該屬性為空,則自動採用標註出的變數或方法名作為bean的名稱
@Inject和@Autowired註解一樣也是按型別匹配注入的Bean,但沒有required屬性
建議使用@Autowired註解

以上就是知識點:下面看例項:

先截知識點少的類:





UserRepositoryImpl知識點1


userRepositoryimpl知識點2


相關spring的xml配置檔案,測試時開啟對應註釋就好




總體測試及建的包啥的


相關文章