spring 2.5 中除了提供 @Component 注釋外,還定義了幾個擁有特殊語義的注釋,它們分別是:@Repository、@Service 和 @Controller。在目前的 Spring 版本中,這 3 個注釋和 @Component 是等效的,但是從注釋類的命名上,很容易看出這 3 個注釋分別和持久層、業務層和控制層(Web 層)相對應。
通過在類上使用 @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/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!
