spring元件掃描使用詳解
Spring 2.5引入了更多典型化註解(stereotype annotations): @Component
、@Service
和 @Controller
。 @Component
是所有受Spring管理元件的通用形式; 而@Repository
、@Service
和 @Controller
則是@Component
的細化,
用來表示更具體的用例(例如,分別對應了持久化層、服務層和表現層)。也就是說, 你能用@Component
來註解你的元件類, 但如果用@Repository
、@Service
或@Controller
來註解它們,你的類也許能更好地被工具處理,或與切面進行關聯。
例如,這些典型化註解可以成為理想的切入點目標。當然,在Spring Framework以後的版本中, @Repository
、@Service
和 @Controller
也許還能攜帶更多語義。如此一來,如果你正在考慮服務層中是該用
@Component
還是@Service
, 那@Service
顯然是更好的選擇。同樣的,就像前面說的那樣, @Repository
已經能在持久化層中進行異常轉換時被作為標記使用了。”
下面是網上目前關於元件掃描最詳細的介紹
Spring applicationContext.xml的<context:component-scan >標籤用途比我想像的還要實用。而且後來才知道,有了<context:component-scan >,另一個<context:annotation-config/>標籤根本可以移除掉,因為被包含進去了。原本我survery Spring3通常只配置成<context:component-scan base-package="com.foo.bar"/>,意即在base-package下尋找有@Component和@Configuration的target Class。而現在如下的飯粒:
<context:component-scan
base-package="com.foo" use-default-filters
="false"> |
<context:component-scan > 提供兩個子標籤:<context:include-filter>和<context:exclude-filter>各代表 引入和排除的過濾。而上例把use-default-filters屬性設為false,意即在base-package所有被宣告為 @Component和@Configuration等target Class不予註冊為bean,由filter子標籤代勞。
filter標籤在Spring3有五個type,如下:
Filter Type | Examples Expression | Description |
annotation | org.example.SomeAnnotation | 符合SomeAnnoation的target class |
assignable | org.example.SomeClass | 指定class或interface的全名 |
aspectj | org.example..*Service+ | AspectJ語法 |
regex | org\.example\.Default.* | Regelar Expression |
custom | org.example.MyTypeFilter | Spring3新增自訂Type,實作org.springframework.core.type.TypeFilter |
所以上例用的regex就有個語病,com.foo.config.* 可以找到com.foo.config.WebLogger,但也可以找到com1fool2config3abcde,因為小數點在Regex是任意字 元,是故要用\.把小數點跳脫為佳。(2010/3/15補充:但要使用\.方式,其use-default-filters不能為false,否則抓不 到,感覺是Bug)
Spring3提供豐富的Filter支援,有益配置策略,不需面臨Configuration Hell,比如Regex的com\.foo\.*\.action\.*Config,這樣就可以找到com.foo package下所有action子package的*Config的target class。
我按他的例子,配置了我自己的如下:
<context:include-filter type="regex" expression="com.lee.finance.budget.service.*"/>
<context:include-filter type="regex" expression="com.lee.finance.budget.security.*"/>
</context:component-scan >
<context:include-filter type="regex" expression="com.lee.finance.budget.*"/>
</context:component-scan >
<context:include-filter type="regex" expression="com\.lee\.finance\.budget\.service.*"/>
</context:component-scan >問題依舊
<context:include-filter type="regex" expression="com.lee.finance.budget.service.TestService"/>
</context:component-scan >
<context:include-filter type="regex" expression=".service.*"/>
</context:component-scan >
相關文章
- Spring 自動掃描元件Spring元件
- Nmap掃描教程之基礎掃描詳解
- 【Spring註解驅動開發】元件註冊-@ComponentScan-自動掃描元件&指定掃描規則Spring元件
- spring 掃描BeanDefinition詳解以及TypeFilter擴充套件點SpringBeanFilter套件
- spring boot啟動掃描不到自定義註解Spring Boot
- iOS 使用CIDetector掃描相簿二維碼、原生掃描iOSIDE
- TWAIN掃描識別控制元件:Web應用程式的掃描器SDKAI控制元件Web
- 解讀Oracle 索引掃描Oracle索引
- 掃描技術和掃描工具
- 23_Oracle資料庫全表掃描詳解(三)Oracle資料庫
- 22_Oracle資料庫全表掃描詳解(二)Oracle資料庫
- 21_Oracle資料庫全表掃描詳解(一)Oracle資料庫
- 關係型資料庫全表掃描分片詳解資料庫
- Nessus漏洞掃描教程之使用Nmap工具掃描識別指紋
- 如何使用evilscan 掃描網路
- Web漏洞掃描篇-Nessus使用Web
- 24_Oracle資料庫全表掃描詳解(四)_全表掃描生產最佳化案例三則Oracle資料庫
- Win10怎麼使用掃描器功能 win10使用掃描功能的方法Win10
- @ComponentScan註解的實現,Spring掃描包的過程Spring
- AWVS掃描器掃描web漏洞操作Web
- 使用索引快速全掃描(Index FFS)避免全表掃描的若干場景索引Index
- win10系統掃描器提示掃描不到掃描器如何解決Win10
- 掃描王 for Mac專業圖片掃描工具Mac
- QingScan掃描器安裝、使用
- 漏洞掃描軟體Nessus使用教程
- IOS 使用 ZbarSDK 二維碼掃描iOS
- 使用索引掃描來進行排序索引排序
- APP漏洞掃描器之本地拒絕服務檢測詳解APP
- Win10系統下掃描器程式無法掃描的解決方法Win10
- Spring Boot 基於註解驅動原始碼分析--自動掃描Spring Boot原始碼
- spring盒springMVC整合父子容器問題:整合Spring時Service層為什麼不做全域性包掃描詳解SpringMVC
- Oracle中存取資料掃描Table及索引的方式(全表掃描,索引掃描等)Oracle索引
- MySQL中的全表掃描和索引樹掃描MySql索引
- 埠掃描器
- 安全掃描工具
- 綜合掃描工具
- 掃描器在工作中的使用
- 京東掃描平臺EOS—JS掃描落地與實踐JS