@Repository 、@Service 、 @Controller 、@Component 這四個Spring注解 ,用于把加了注解的 類 加入到Spring 容器中管理,節省了xml 的繁重的配置,盡管如此xml 同樣可以實現(一般建議先搞懂xml)。
@Repository
@Repository注解便屬于最先引入的一批,它用于將數據訪問層 (DAO 層 ) 的類標識為 Spring Bean。具體只需將該注解標注在 DAO類上即可。同時,為了讓 Spring 能夠掃描類路徑中的類并識別出 @Repository 注解,需要在 XML 配置文件中啟用Bean 的自動掃描功能,這可以通過 <context:component-scan/> 實現。
<context:component-scan base-package=”com.dao” />
如此,我們就不再需要在 XML 中顯式使用 <bean/> 進行Bean 的配置。Spring 在容器初始化時將自動掃描 base-package 指定的包及其子包下的所有 class文件,所有標注了 @Repository 的類都將被注冊為 Spring Bean。
為什么 @Repository 只能標注在 DAO 類上呢?這是因為該注解的作用不只是將類識別為Bean,同時它還能將所標注的類中拋出的數據訪問異常封裝為 Spring 的數據訪問異常類型。 Spring本身提供了一個豐富的并且是與具體的數據訪問技術無關的數據訪問異常結構,用于封裝不同的持久層框架拋出的異常,使得異常獨立于底層的框架。
@Service 通常作用在業務層,但是目前該功能與 @Component 相同。
@Contryoller? 通常作用在控制層,但是目前該功能與 @Component 相同。
@Component ? 是一個泛化的概念,僅僅表示一個組件 (Bean) ,可以作用在任何層次。
?
通過在類上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring會自動創建相應的 BeanDefinition 對象,并注冊到 ApplicationContext 中。這些類就成了 Spring受管組件。這三個注解除了作用于不同軟件層次的類,其使用方式與 @Repository 是完全相同的。
?
? 謝謝大家的關注,續更ing......