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


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。

v源碼地址

https://github.com/toutouge/javademosecond/tree/master/hellospringboot


作  者:請叫我頭頭哥
出  處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM