一、基於@Component註解的配置
Spring 2.5 中除了提供 @Component 註釋外,還定義了幾個擁有特殊語義的註釋,它們分別是:@Repository、@Service 和 @Controller。
在目前的 Spring 版本中,這 3 個註釋和 @Component 是等效的,但是從註釋類的命名上,很容易看出這 3 個註釋分別和持久層、業務層和控制層(Web 層)相對應。
雖然目前這3 個註釋和 @Component 相比沒有什麼新意,但 Spring 將在以後的版本中爲它們添加特殊的功能。所以,如果 Web 應用程序採用了經典的三層分層結構的話,最好在持久層、業務層和控制層分別採用上述註解對分層中的類進行註釋。
1、@controller 控制器(注入服務)
2、@service 服務(注入dao)
4、@component (把普通pojo實例化到spring容器中,相當於配置文件中的<bean id="" class=""/>)
@component用法如下:
在類上使用@Component註解,表示該類定義爲Spring管理Bean,使用默認value(可選)屬性表示Bean標識符。
相當於:
@Component,@Service,@Controller,@Repository註解的類,並把這些類納入進spring容器中管理。
下面寫這個是引入component的掃描組件
其中base-package爲需要掃描的包(含所有子包)
@Component泛指組件,當組件不好歸類的時候,我們可以使用這個註解進行標註。
二、使用實例
User.java:用@Repository註解
UserDao.java
UserDaoImp.java:用@Controller註解
UserService.java:用@Service註解
beans.xml'
測試下:
結果:
當在組件類中使用了特定的註解之後,還需要在Spring的配置文件中聲明 <context:component-scan>:
- base-package屬性指定一個需要掃描的基類包,Spring容器將會掃描整個基類包裏及其子包中的所有類
- 當需要掃描多個包時,可以使用逗號分隔
- 如果僅希望掃描特定的類而非基包下的所有類,可使用resource-pattern屬性過濾特定的類,實例:
- <context:include-filter>子節點表示要包含的目標類
- <context:exclude-filter>子節點表示要排除在外的目標類
- <context:component-scan>下可以擁有若干個<context:include-filter>和<context:exclude-filter>子節點
- <context:include-filter>和<context:exclude-filter>子節點支持多種類型的過濾表
三、更多的配置元數據
1、@Lazy:定義Bean將延遲初始化,使用方式如下:
使用@Lazy註解指定Bean需要延遲初始化。
2、@DependsOn:定義Bean初始化及銷燬時的順序,使用方式如下:
3、@Scope:定義Bean作用域,默認單例,使用方式如下:
4、@Qualifier:指定限定描述符,對應於基於XML配置中的<qualifier>標籤,使用方式如下:
可以使用複雜的擴展,如@Mysql等等。
5、@Primary:自動裝配時當出現多個Bean候選者時,被註解爲@Primary的Bean將作爲首選者,否則將拋出異常,使用方式如下: