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"/>

這裏寫圖片描述

源碼可以在我的資源中查看 或者 github地址
https://github.com/wangfa1994/SpringLearning/tree/spring00401

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章