SpringBoot入門教程(十七)@Service、@Controller、@Repository、@Component

請叫我頭頭哥發表於2018-12-22

spring 2.5 中除了提供 @Component 註釋外,還定義了幾個擁有特殊語義的註釋,它們分別是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,這 3 個註釋和 @Component 是等效的,但是從註釋類的命名上,很容易看出這 3 個註釋分別和持久層、業務層和控制層(Web 層)相對應。

@Service用於標註業務層元件
@Controller用於標註控制層元件(如struts中的action)
@Repository用於標註資料訪問元件,即DAO元件
@Component泛指元件,當元件不好歸類的時候,我們可以使用這個註解進行標註

通過在類上使用 @Service、@Controller、@Repository和@Component註解,Spring會自動建立相應的 BeanDefinition 物件,並註冊到 ApplicationContext 中。這些類就成了 Spring受管元件。這三個註解除了作用於不同軟體層次的類,其使用方式與 @Repository 是完全相同的。

當一個 Bean 被自動檢測到時,會根據那個掃描器的 BeanNameGenerator 策略生成它的 bean名稱。預設情況下,對於包含 name 屬性的 @Component、@Repository、 @Service 和@Controller,會把 name 取值作為 Bean 的名字。如果這個註解不包含 name值或是其他被自定義過濾器發現的元件,預設 Bean 名稱會是小寫開頭的非限定類名。如果你不想使用預設 bean命名策略,可以提供一個自定義的命名策略。首先實現 BeanNameGenerator介面,確認包含了一個預設的無引數構造方法。然後在配置掃描器時提供一個全限定類名.

@Service  
public class UserServiceImpl implements UserService {     
}  
@Controller
public class UserController {
}
@Repository  
public class UserDaoImpl implements UserDao {   
}  
@Component
public class UserUtil {
}

注入方式

把DAO實現類注入到action的service介面(注意不要是service的實現類)中,注入時不要new 這個注入的類,因為spring會自動注入,如果手動再new的話會出現錯誤,然後屬性加上@Autowired後不需要getter()和setter()方法,Spring也會自動注入。

在介面前面標上@Autowired註釋使得介面可以被容器注入,如:

@Autowired  
@Qualifier("cn")  
private User user;   

當介面存在兩個實現類的時候必須使用@Qualifier指定注入哪個實現類,否則可以省略,只寫@Autowired。

作  者:請叫我頭頭哥

出  處:http://www.cnblogs.com/toutou/

關於作者:專注於基礎平臺的專案開發。如有問題或建議,請多多賜教!

版權宣告:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連結。

特此宣告:所有評論和私信都會在第一時間回覆。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信

聲援博主:如果您覺得文章對您有幫助,可以點選文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!

相關文章