Spring典型註解-@Controller,@Component,@

dunne21發表於2021-09-09

這次看一下Spring典型的註解,@Controller,@Service,@Component,@Repository。這四個註解在我們開發中非常的常見,用於定義不同型別的beans。

程式碼

在spring原始碼包中,這四個註解的定義

// Component註解定義
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Component {
	String value() default "";

}

// Repository註解定義
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Repository {
	String value() default "";

}

// Service註解定義
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Service {
	String value() default "";

}

// Controller註解定義
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
	String value() default "";

}

可以看到,四個註解都可以說成事Component級別的註解,Spring框架自動掃描的註解也是檢測是否有Component註解標記。

@Component

這個註解主要用於標記一個類作為spring的元件,spring掃描的時候掃描的是這個註解。
標記@Component的類在spring的beanName中是類首字母小寫,其餘字母都一樣。

因為其它幾個常用典型註解也是Component,所以他們與Component有相同的beanName命名方式。

@Repository

這個註解用來標識這個類是用來直接訪問資料庫的,這個註解還有一個特點是“自動轉換(automatic translation)”。就是在標記 @Repositor發生異常的時候,會有一個處理器來處理異常,而不需要手動的再加try-catch塊。

為了啟用自動轉換異常的特性,我們需要宣告一個PersistenceExceptionTranslationPostProcessor的bean。

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
    return new PersistenceExceptionTranslationPostProcessor();
}

或者在XML檔案中:

<bean class=
  "org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

@Service

應用的業務邏輯通常在service層實現,因為我們一般使用@Service註解標記這個類屬於業務邏輯層。

@Service
public class SyncPreAuthInfoService{
    //....
}

@Controller

這個註解主要告訴Spring這個類作為控制器,可以看做標記為暴露給前端的入口。

@Controller
public class PayRecordsStatisticsController{
    //...
}

最後

專案小的時候對這些註解沒有特別的區分,但專案如果變得越來越大,那麼就要劃分的細緻一些有一定的規則才方便大家的維護。有點像衣服,雖然都是衣服,但是有的是要穿出去開party的,有的是穿出去運動的,有的是休閒的。功能一樣,但是用途不是很相同。

  • @Component spring基礎的註解,被spring管理的元件或bean
  • @Repository 用於持久層,資料庫訪問層
  • @Service 用於服務層,處理業務邏輯
  • @Controller 用於呈現層,(spring-mvc)

參考

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1600/viewspace-2817185/,如需轉載,請註明出處,否則將追究法律責任。

相關文章