1. 程式人生 > >spring知識四------基於註解的配置bean

spring知識四------基於註解的配置bean

Spring基於註解的配置中,首先我們應該知道首先加入aop的jar包,所有的關於註解的,都是基於這個jar包進行的,然後我們應該引入context名稱空間,然後在配置檔案中增加我們所需要的掃描的包。

元件掃描(component scanning): Spring 能夠從 classpath 下自動掃描, 偵測和例項化具有特定註解的元件。
四大特定元件
@Component: 基本註解, 標識了一個受 Spring 管理的元件
@Respository: 標識持久層元件
@Service: 標識服務層(業務層)元件
@Controller: 標識表現層元件
注意:spring沒有嚴格定義這樣的元件規定,但是一般給予mvc模型我們都這樣進行設定。


注意:spring在掃描元件進行bean的初始化時,由於我們沒有辦法給其設定id值,而在spring註解中有預設的bean命名方式,就是使用類名,但是是將類名的額第一個字母小寫的類名。【例如類UserService在初始化bean時則被預設為userService。】我們也可以通過註解中的 value 屬性值標識元件的名稱

配置項【context:component-scan】
【 base-package】 屬性 指定一個需要掃描的基類包,Spring 容器將會掃描這個基類包裡及其子包中的所有類,當需要掃描多個包時, 可以使用逗號分隔。
【resource-pattern 】屬性

過濾特定的類,掃描特定的類而非基包下的所有類。

【context:include-filter】子節點表示要包含的目標類。可以存在任意個。
【context:exclude-filter】子節點表示要排除在外的目標類。可以存在任意個。
【context:include-filter】 和【context:exclude-filter】子節點支援多種型別的過濾表示式:
這裡寫圖片描述

<!-- 基本掃描  掃描com.wf.springannotation下所有的包和類中特定的元件,進行初始化bean -->
<context:component-scan base-package
="com.wf.springannotation">
</context:component-scan> <!--resource-pattern 指定掃描的資源,僅掃描基包中repository包中的所有class --> <context:component-scan base-package="com.wf.springannotation" resource-pattern="repository/*.class"> </context:component-scan> <context:component-scan base-package="com.wf.springannotation" use-default-filters="true"> <!-- 指定排除那些指定的表示式的annotation元件,注意type屬性 --> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> <!-- 只包含指定表示式的annotation元件 該子節點需要配合 父節點的 use-default-filters="false"進行使用,其餘情況不用設定此屬性--> <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/> <!-- 指定排除指定表示式的類或者介面以及介面的實現類 --> <context:exclude-filter type="assignable" expression="com.wf.springannotation.repository.UserRepository"/> <!-- 只包含指定的類或者介面以及介面的實現類 --> <context:include-filter type="assignable" expression="com.wf.springannotation.repository.UserRepository"/> </context:component-scan>

@Autowired註解
@Autowired 註解自動裝配具有相容型別的單個 Bean屬性。
1、構造器, 普通欄位(即使是非 public), 一切具有引數的方法都可以應用@Authwired 註解(一般情況下,我們都將@Authwired配置在欄位上面)。
2、所有使用 @Authwired 註解的屬性都需要被設定為元件. 當 Spring 找不到匹配的 Bean 裝配屬性時, 會丟擲異常, 若某一屬性允許不被設定, 可以設定 @Authwired 註解的 required 屬性為 false
3、當 IOC 容器裡存在多個型別相容的 Bean 時, 通過型別的自動裝配將無法工作. 此時可以在 @Qualifier 註解裡提供 Bean 的名稱. Spring 允許對方法的入參標註 @Qualifiter 已指定注入 Bean 的名稱(最典型的就是一個介面如果存在多個實現類,那麼我們就可以利用這個屬性指定裝載的bean)。
4、@Authwired 註解也可以應用在陣列型別的屬性上, 此時 Spring 將會把所有匹配的 Bean 進行自動裝配。
5、@Authwired 註解也可以應用在集合屬性上, 此時 Spring 讀取該集合的型別資訊, 然後自動裝配所有與之相容的 Bean.【例如ArrayList[UserService] lists 此時將會裝載所有的UserService的bean例項到lists集合中】。
6、@Authwired 註解用在 java.util.Map 上時, 若該 Map 的鍵值為 String, 那麼 Spring 將自動裝配與之 Map 值型別相容的 Bean, 此時 Bean 的名稱作為鍵值。

@Autowired與@Resource 或 @Inject
@Resource 註解要求提供一個 Bean 名稱的屬性,若該屬性為空,則自動採用標註處的變數或方法名作為 Bean 的名稱。
@Inject 和 @Autowired 註解一樣也是按型別匹配注入的 Bean, 但沒有 reqired 屬性。
建議使用 @Autowired 註解

整合多個配置檔案
Spring 允許通過 【import】 將多個配置檔案引入到一個檔案中,進行配置檔案的整合。這樣在啟動 Spring 容器時,僅需要指定這個合併好的配置檔案就可以。

import 元素的 resource 屬性支援 Spring 的標準的路徑資源

  <import resource="classpath:beans-annotationrelation.xml"/>

這裡寫圖片描述